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

获得积分最多的人(二)

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

全部评论

相关推荐

点赞 评论 收藏
分享
想按时下班的大菠萝在...:隔壁学校的,加油多投, 实在不好找可以下个学期开学找,把算法八股准备好,项目有空再换换
投了多少份简历才上岸
点赞 评论 收藏
分享
仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务