with new_grade_info as (
select
user_id,
case
when type = 'add' then grade_num
when type = 'reduce' then (-1 * grade_num)
end as grade_num
from
grade_info
),
sum_grade_info as (
select
user_id,
sum(grade_num) as grade_num,
rank() over (order by sum(grade_num) desc) as rn
from
new_grade_info
group by
user_id
)
select
u.id,
u.name,
s_g_i.grade_num
from
sum_grade_info as s_g_i
left join
user as u
on
s_g_i.user_id = u.id
where
s_g_i.rn = 1
order by
u.id


京公网安备 11010502036488号