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