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

获得积分最多的人(一)

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

全部评论

相关推荐

佛系的本杰明反对画饼:个人看法,实习经历那段是败笔,可以删掉,它和你目标岗位没什么关系,没有用到什么专业技能,甚至会降低你项目经历内容的可信度。个人技能那里可以再多写一点,去boss直聘上看别人写的岗位要求,可以把你会的整合一下,比如熟悉常规的开关电源拓扑结构(BUCK、正激、反激、LLC等),熟悉常用的通信总线协议和通信接口,如UART,IIC,SPI等。简历首先是HR看的,HR大多不懂技术,会从简历里去找关键字,你没有那些关键字他可能就把你筛掉了,所以个人技能尽量针对着岗位描述写一下。还有电赛获佳绩,获奖了就写什么奖,没获奖就把获佳绩删了吧,要不会让人感觉夸大。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务