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