select id,name,grade_sum from
(select user_id,grade_sum,rank() over(order by grade_sum desc) as tk from
(select DISTINCT user_id,sum(case when type='add' then grade_num else -grade_num end) over(partition by user_id) grade_sum from grade_info
order by grade_sum desc)t1
)t2
join user u
ON id=user_id
where tk=1