假设您有一张包含studentID,班级,成绩的表格。我希望每节课的成绩最高。这很容易,只是逐个分组并获得最高(等级)。但我遇到的问题是如何获得studentID。
答案 0 :(得分:2)
您可以使用窗口函数来代替使用聚合函数:
SELECT class, grade, studentId
FROM (SELECT class, grade, studentId,
RANK() OVER (PARTITION BY class ORDER BY grade DESC) rk
FROM students)
WHERE rk = 1
答案 1 :(得分:1)
我认为distinct on
是一个很好的方法:
select distinct on (s.class) s.*
from students
order by s.class, s.grade desc;
但是,您可能希望所有学生获得最高成绩的每个班级。如果是这样,Mureinik的解决方案会更好。