2

假设您有一个包含studentID,class,grade的表格。我想要每个班的最高成绩。这很容易,只是按班级分组,并获得最高(等级)。但是我遇到的问题是如何获得studentID。Postgresql从最大元组中获取其他信息

+0

看看这个:http://stackoverflow.com/questions/41049947/how-do-i-select-the-max-score-from-each-distinct-user-in-this-table – bernie

回答

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

我觉得distinct on是一个很好的路要走:但是你可能想所有学生

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

每班有最高成绩。如果是这样,Mureinik的解决方案更好。