先用窗口函数计算积分,再把积分进行排序,在连接用户表筛选
select
t1.id
,t1.name
,t0.grade as grade_sum
from
(
select user_id,grade,rank()over(order by grade desc) as rk
from
(
select user_id,sum(if(type='add',grade_num,-1*grade_num)) as grade
from grade_info
group by user_id
) as a
) as t0
left join user as t1 on t0.user_id = t1.id
where rk = 1