sql分组求和取最大值

问题:表t有三个字段,student(学生姓名),class(科目),score(成绩),需要找到总成绩最高的学生的姓名[b](可能有多个)[/b]

一开始的做法:
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中不能用
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值