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

获得积分最多的人(一)

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

全部评论

相关推荐

09-29 12:24
门头沟学院 Java
点赞 评论 收藏
分享
程序员牛肉:小牛肉来也! 基本破不了局了,我给你的建议是适当放弃秋招,投递大厂的日常实习之后赶明年的春招。 在没有实习的情况下,你的项目经历给面试官的作用就是提供提问点方便面试官来提问八股以及场景题而已。因此你现在简历的写法不太对,要着重突出项目中使用的技术点,而不是像你现在这个写的很宽泛。 最好是“基于xxxx技术解决了xxxx问题,解决了xxxx边缘场景问题”。最好是这样写,方便面试官对你的简历进行提问。 最后的最后,问题其实不在你。今年的秋招确实比较寒冬一点,所以找不到是正常的。要做好打持久战的准备。
Java学习交流
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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