题解 | #获得积分最多的人(二)#

获得积分最多的人(二)

http://www.nowcoder.com/practice/b6248d075d2d4213948b2e768080dc92

这个题和89题是一套模板,只有一处地方不一样。89题只能选一个人,在排名的时候用row_number()函数,避免重复,90题多个人,在排名的时候用rank()或dense_rank()得到有重复排名的表
首先,得到每个人的id和总分表a
select user_id,sum(grade_num) over(partition by user_id)as grade_sum
from grade_info
其次,得到按成绩排名的a表,a1
select *,row_number() over(order by a.grade_sum desc) as t_rank
from
(select user_id,sum(grade_num) over(partition by user_id)as grade_sum
from grade_info) a
最后,选出最高分的人
select user.name,a1.grade_sum
from
(select *,row_number() over(order by a.grade_sum desc) as t_rank
from
(select user_id,sum(grade_num) over(partition by user_id)as grade_sum
from grade_info) a) a1,user
where a1.user_id=user.id
and a1.t_rank=1

全部评论

相关推荐

头像
05-27 20:32
已编辑
深度学习
工行数据中心 偏运维养老 到手可能18w
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务