Postgresql从max tuple获取其他信息

时间:2016-12-09 20:54:23

标签: sql postgresql max aggregate-functions greatest-n-per-group

假设您有一张包含studentID,班级,成绩的表格。我希望每节课的成绩最高。这很容易,只是逐个分组并获得最高(等级)。但我遇到的问题是如何获得studentID。

2 个答案:

答案 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的解决方案会更好。