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

获得积分最多的人(二)

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

问题:请你写一个SQL查找积分增加最高的用户的id(可能有多个),名字,以及他的总积分是多少,查询结果按照id升序排序

问题拆解:1.对表grade_info按照user_id分组,对字段grade_num求和,并按照求和后降序排序。(这里不能用orderby+limit的方法,因为可能有并列第一名的情况存在)

(SELECT user_id, 
 SUM(grade_num) s, 
 RANK() OVER(ORDER BY SUM(grade_num) DESC) r 
FROM grade_info
GROUP BY user_id) r1

2.步骤1新生成的表命名为r1,将r1和表user链接,设置r1.user_id=u.id,提取需要字段id, name, sum。

3.在步骤2的基础上设定限定条件,排名为第一名

4.最后常规order by,最后一句orderby不写也是对的,应该是系统默认就是升序排序

SELECT u.id, u.name, s FROM
	(SELECT user_id, 
     SUM(grade_num) s, 
     RANK() OVER(ORDER BY SUM(grade_num) DESC) r 
    FROM grade_info
	GROUP BY user_id) r1
JOIN user u 
ON r1.user_id =u.id
WHERE r=1
ORDER BY u.id
全部评论

相关推荐

穿件外套出门:这简历一眼太水了,前面有的没的直接删,写项目亮点
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务