- 和第一题一样,建一个group by user的加好积分的临时积分表。
- 同时利用rank() over()直接对聚合函数sum(grade_num)进行排序。
- 将这个临时积分表与user表连接之后,取排名为1即可。
select u.id,u.name,t.grade_num
from user u join (
SELECT gi.user_id
, sum(grade_num) as grade_num
, rank() over(order by sum(grade_num) desc) as t_rank
FROM grade_info gi
WHERE type='add'
group by gi.user_id) t
on u.id = t.user_id
where t.t_rank = 1
order by u.id