问题:表t有三个字段,student(学生姓名),class(科目),score(成绩),须要找到总成绩最高的学生的姓名
(可能有多个) 一开始的作法: select student,sum(score) from t group by student having sum(score) = (select temp.s from (select student,sum(score) s from t group by student order by s desc limit 1) as temp) 思路是先分组求和,而后对和最大的值取出来,当分组求和的列表的一个值等于最大的值,则取出这条记录。可是group by了两次,想当不爽。 后面找到了rank函数,因而有了这个写法 select * from ( with tmp as( select student,sum(score) as sum_score from student group by student ) select rank() OVER ( order by tmp.sum_score desc) as cc,* from tmp) as tc where tc.cc = 1 把分组求和作成一个临时视图tmp,而后找出临时视图rank over排序后的排序为1的记录。 rank over函数在pg,mssql,oracle中均可用,在mysql中不能用