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

获得积分最多的人(三)

https://www.nowcoder.com/practice/d2b7e2a305a7499fb310dc82a43820e8

select 
    a1.id,
    a1.name,
    a1.grade_num
from (
    select
        t1.id,
        t1.name,
        ifnull(t2.grade_num,0) + ifnull(t3.grade_num,0) grade_num,
        -- 给所有用户的分数进行排名打标,并列分数排名相同
        rank() over(order by ifnull(t2.grade_num,0) + ifnull(t3.grade_num,0) desc) rn
    from user t1
    left join (
        -- 求每个用户总加分数
        select
            user_id,
            sum(grade_num) grade_num
        from grade_info
        where type = 'add'
        -- 可能存在多条加分记录
        group by user_id
    ) t2
    on t1.id = t2.user_id
    left join(
        -- 求每个用户总减分数
        select
            user_id,
            sum(grade_num) * (-1) grade_num
        from grade_info
        where type = 'reduce'
        -- 可能存在多条减分记录
        group by user_id
    ) t3
    on t2.user_id = t3.user_id
) a1
-- 取并列第一
where a1.rn = 1
order by a1.id;

全部评论

相关推荐

头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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