问题:请你写一个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