在前面的基础上,需要变化的点是type为‘reduce’就是负数,所以sum与case when 联合使用,即sum(case when type='reduce' then -g.grade_num else g.grade_num end)as t_num,其他和前两题没什么区别

select
    id,
    name,
    b.t_num as grade_num
from
    (
        select
            user_id,
            t_num,
            rank() over (
                order by
                    t_num desc
            ) as r
        from
            (
                select
                    user_id,
                    sum(case when type='reduce' then -g.grade_num else g.grade_num end)as t_num
                from
                    grade_info as g
                group by
                    user_id
            ) as a
    ) as b
    join user as u on u.id = b.user_id
where
    b.r = 1
    order by id