【发布时间】:2021-08-25 21:00:21
【问题描述】:
我正在寻找每个 student_id 的最高成绩。 成绩分数保存在此表中:
招生表:
| student_id | course_id | grade |
|---|---|---|
| 2 | 2 | 95 |
| 2 | 3 | 95 |
| 1 | 1 | 90 |
| 1 | 2 | 99 |
| 3 | 1 | 80 |
| 3 | 2 | 75 |
| 3 | 3 | 82 |
正确的结果应该是:
| student_id | course_id | grade |
|---|---|---|
| 1 | 2 | 99 |
| 2 | 2 | 95 |
| 3 | 3 | 82 |
这是我正在尝试的查询:
SELECT student_id, course_id, grade
FROM Enrollments
GROUP BY student_id
HAVING grade = (SELECT MAX(grade) OVER(PARTITION BY student_id))
ORDER BY student_id ASC
但是通过这个查询,我得到的结果是:
| student_id | course_id | grade |
|---|---|---|
| 1 | 2 | 90 |
| 2 | 2 | 95 |
| 3 | 3 | 80 |
即学生1的成绩是90,什么时候应该是99,学生2的成绩是80,什么时候应该是82。
问题似乎是这个查询只是从表中的第一个 course_id 中选择最高成绩,但我不确定为什么会这样。
【问题讨论】: