select u.id,u.name,g.grade_num from user u join (select a.user_id,ifnull(a.add_num-b.red_num,a.add_num) as grade_num ,dense_rank()over(order by ifnull(a.add_num-b.red_num,a.add_num) desc) as g_rank from (select user_id,sum(grade_num) as add_num from grade_info where type="add" group by user_id) a left join (select user_id,sum(grade_num) as red_num from grade_info where type="reduce" group by user_id) b on a.user_id=b.user_id) g on u.id=g.user_id where g.g_rank=1 order by u.id