第一步通过group by 和sum对不用用户的累计积分分组求和,即
( select user_id,
sum(grade_num) as t_num
from
grade_info
group by user_id ) as a
第二步,通过rank()over()函数对第一步的累计积分进行排序,即
select user_id,t_num,
rank() over (order by t_num desc) as r
from
(第一步 ) as b
注:因题目提示有多个积分第一的情况所以,用rank
第三步,将第二步生成的b表和user用join连接,并select 出需要显示的列,即id, name, b.t_num as grade_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(grade_num) as t_num
from
grade_info
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