知识点

  1. 和上一题代码思路一模一样就是求和的时候使用case when函数,当type是reduce的时候是grade_num*-1否则就是grade_num,其他都一样。

代码

with a as(
          select distinct u.id,u.name,
          sum(case type when 'reduce' then grade_num * -1
              else grade_num end) over(partition by g.user_id)as grade_sum
          from user as u
          join grade_info as g
          on u.id=g.user_id)
select * from a
where a.grade_sum=(select max(a.grade_sum) from a)
order by a.id