题解 | #获得积分最多的人(一)#
获得积分最多的人(一)
https://www.nowcoder.com/practice/1bfe3870034e4efeb4b4aa6711316c3b
思路1
自己想的,比较复杂
- 先按照user_id 计算每个人的总积分
- 取max(总积分)
- 聚合表,把总积分加到最后一列。在表里筛选 where 总积分 = 第2步的值(即最大值)
- select name 和总积分
select
u.name,
t.num_total as grade_num
from user u right join (
select
user_id,
sum(grade_num) as num_total
from grade_info
group by user_id
)t on u.id = t.user_id
where t.num_total in (
# 取最大值
select
max(num_total)
from (
select
user_id,
sum(grade_num) as num_total
from grade_info
group by user_id
)a
)
解法2
参考评论区:
- 用窗口函数计算每个人的总积分
- order by 按总积分倒序
- limit 1 取第一行(即最大值)
select
distinct name,
sum(grade_num)over(partition by user_id) as grade_num
from grade_info g
left join user u on g.user_id = u.id
order by grade_num desc
limit 1

巨人网络公司福利 91人发布