select 
    u.id, 
    u.name, 
    t.grade as grade_sum
from
    (
        select 
            user_id,
            grade,
            rank() over(order by grade desc) as rk
        from
            (
                select 
                    user_id,
                    sum(if(type='add', grade_num, -1*grade_num)) as grade
                from 
                    grade_info
                group by user_id
            ) as sub
    ) as t
join user as u
on t.user_id = u.id
where rk = 1
order by 1;