select id, name, grade_num
from (
  select user_id, 
  sum(if(type = 'reduce', grade_num * (-1), grade_num)) as grade_num,
  dense_rank() over(order by sum(if(type = 'reduce', grade_num * (-1), grade_num)) desc) as rk
  from grade_info 
  group by user_id
) s
join user u on u.id = s.user_id and rk = 1

题解区好像没有找到这种解答,所以特此分享一下,主要是嵌套的层数比其他解法要少一些。

本人的其他牛客解题思路分享在了个人博客,欢迎来看:https://blog.csdn.net/m0_37738114/article/details/149281128?sharetype=blogdetail&sharerId=149281128&sharerefer=PC&sharesource=m0_37738114&spm=1011.2480.3001.8118