#思路: #①先根据积分表按照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