在前面的基础上,需要变化的点是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

京公网安备 11010502036488号