1. 和第一题一样,建一个group by user的加好积分的临时积分表。
  2. 同时利用rank() over()直接对聚合函数sum(grade_num)进行排序。
  3. 将这个临时积分表与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