用子函数先把加减的分数搞对,然后在窗口函数就好了
select u.id,u.name,t.grade_sum
from (select user_id,
             sum(num) as grade_sum,
             rank()over(order by sum(num) desc) as a
      from (select user_id, 
             case when type="add" then grade_num*1 else grade_num*-1 end as num
             from grade_info) g
       group by g.user_id) as t
join user u
on u.id = t.user_id
where t.a = 1;