【发布时间】:2016-12-09 20:54:22
【问题描述】:
假设您有一张表,其中包含学生 ID、班级、年级。我想要每个班级的最高分。这很容易,只需按班级分组并获得最高(等级)。但我遇到的问题是如何获取学生 ID。
【问题讨论】:
标签: sql postgresql max aggregate-functions greatest-n-per-group
假设您有一张表,其中包含学生 ID、班级、年级。我想要每个班级的最高分。这很容易,只需按班级分组并获得最高(等级)。但我遇到的问题是如何获取学生 ID。
【问题讨论】:
标签: sql postgresql max aggregate-functions greatest-n-per-group
您可以使用窗口函数来代替聚合函数:
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 的解决方案会更好。
【讨论】: