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

获得积分最多的人(一)

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

全部评论

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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