select t.id,t.name,t.grade_sum from (select u.id,u.name,rank() over(order by g_sum desc) rnk,g.g_sum as 'grade_sum' from (select user_id, sum(case when type='reduce' then -1*grade_num else grade_num end)g_sum from grade_info group by user_id)g join user u on u.id=g.user_id order by u.id)t where t.rnk=1