题解 | #获得积分最多的人(一)#

获得积分最多的人(一)

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

全部评论

相关推荐

牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务