【发布时间】:2021-07-01 13:27:26
【问题描述】:
我的数据库中有一个 QuizAttempt 表,如下所示
| QAID | QID | UID | Score | Time |
| ---- | --- | --- | ----- | ---- |
| 1 | 5 | 3 | 119 | 105 |
| 2 | 5 | 3 | 117 | 70 |
| 3 | 5 | 3 | 119 | 90 |
| 4 | 5 | 4 | 120 | 130 |
其中QAID = 测验尝试 ID,QID = 测验 ID,UID = 用户 ID,Score = 尝试得分,Time = 用时秒数
我想先降序获得基于分数的用户排名,如果分数相同,则升序获得时间。此外,我还必须将参加过一次测验的用户分组并展示他们的最佳尝试。
所以结果应该是这样的(Grouped UID 3)
| QAID | QID | UID | Score | Time |
| ---- | --- | --- | ----- | ---- |
| 4 | 5 | 4 | 120 | 130 |
| 3 | 5 | 3 | 119 | 90 |
我知道我可以应用 Group By UID 然后 Max(Score) 但另外我还必须根据该记录选择时间,但我是否会在 GROUP BY 中选择 119 旁边的最低分数?
因为如果我写
Select QID, UID, Max(Score) as Topper, Min(Time) as MinTime from QuizAttempt
Group By QID, UID
Order By Topper DESC
我明白了
| QID | UID | Topper | MinTime |
| --- | --- | ------ | ------- |
| 5 | 4 | 120 | 130 |
| 5 | 3 | 119 | 70 |
我得到 70 分,这是总分(时间),属于 得分 117
的记录如果我试试这个
Select QID, UID, Max(Score) as Topper, Min(Time) as MinTime from QuizAttempt
Group By QID, UID,Score
Order By Topper DESC
我明白了
| QID | UID | Topper | MinTime |
| --- | --- | ------ | ------- |
| 5 | 4 | 120 | 130 |
| 5 | 3 | 119 | 90 |
| 5 | 3 | 117 | 70 |
我应该如何正确地进行分组?我正在使用 MS SQL Management Studio 2008
【问题讨论】:
标签: sql sql-server-2008