select id, name, sum_g from( select id, name, sum_g, rank()over(order by sum_g desc) as r from( select id, name, sum(diff) as sum_g from( select id, name, case when type='add' then grade_num else (-1)*grade_num end as diff from grade_info left join user on grade_info.user_id=user.id) as tb1 group by id, name) as tb2 ) as tb3 where r=1 order by id