题解 | #获得积分最多的人(一)#
获得积分最多的人(一)
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