select id, name, t1.grade_num from ( select user_id, sum(case when type='add' then grade_num else concat('-',grade_num) end) as grade_num, dense_rank() over(order by sum(case when type='add' then grade_num else concat('-',grade_num) end) desc) as rk from grade_info group by user_id ) as t1 join user as u on t1.user_id=u.id where rk=1 order by id;