#思路:
#①先根据积分表按照u_id分组求和,只是要加入一个if判断,add时为正,reduce时为负;
#②根据计算出的积分用窗口函数做排序;
#③与表user连接,选出排序=1的数据即可。

select id, name, grade_num
from(
select user_id, grade_num, 
rank()over(order by grade_num desc) r 
from(
select user_id, sum(grade_num*(if(type='add',1,-1))) grade_num
from grade_info
group by user_id) as tb1
) as tb2
left join 
user on user.id=tb2.user_id
where r=1
order by id