select e.user_id,
e.name,
e.grade_sum
from
(select ,
dense_rank() over(order by d.grade_sum desc) as t_rank
from
(select distinct c.user_id,
c.name,
sum(c.grade_num_new) over(partition by c.user_id) as grade_sum
from
(select b.user_id,
a.name,
case when b.type='add' then b.grade_num else b.grade_num(-1) end as grade_num_new
from grade_info b
join
user a
on a.id = b.user_id) as c) as d) as e
where e.t_rank = 1
order by e.user_id;