with t as (select u.id,u.name, case when g.type='add' then g.grade_num else -1*g.grade_num end as grade_num from user u inner join grade_info g on u.id=g.user_id ) select t2.id, t2.name, t2.grade_num from (select t1.id, t1.name, t1.grade_num, dense_rank() over(order by t1.grade_num desc) as r from( select t.id, t.name, sum(t.grade_num) as grade_num from t group by t.id,t.name) t1) t2 where t2.r=1 order by t2.id