PostgreSQL从Max Tuple获取其他信息



说您有一张桌子,班级,等级。我想要每个班级的最高成绩。这很容易,只需按课堂划分并获得最大(等级)。但是我遇到的问题是如何获取studentId。

而不是使用聚合函数,可以使用窗口函数:

SELECT class, grade, studentId
FROM   (SELECT class, grade, studentId, 
               RANK() OVER (PARTITION BY class ORDER BY grade DESC) rk
        FROM   students)
WHERE  rk = 1

我认为distinct on是一个好方法:

select distinct on (s.class) s.*
from students
order by s.class, s.grade desc;

但是,您可能想要每个班级的所有学生都有最高成绩。如果是这样,Mureinik的解决方案更好。

相关内容

最新更新