select user_id,name,s1 from(select user_id,name,s1,dense_rank()over(order by s1 desc)dr from(select distinct user_id,name,sum(t1)over(partition by user_id)as s1 from(select user_id,(cast(grade_num as signed)*cast(t as signed))as t1 from(select *, case when type='add'then '1' else'-1' end as t from grade_info)a)b join user u on b.user_id=u.id)c)d where d.dr=1