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