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

获得积分最多的人(三)

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;

全部评论

相关推荐

01-14 15:08
东南大学 Java
点赞 评论 收藏
分享
03-04 22:29
已编辑
门头沟学院 Web前端
家人们上上周我花了一天时间写了一下简历,然后投出去试试水看看有没有反应,结果投出去6份,有一个北京某1000人以上规模公司的笔试邀请和南京某20人规模的公司的面试。明天中午就要面试了,说要做一个ppt讲述一下项目经验,我有点摸不着头脑,不知道怎么写,我想写第一个管理系统的项目,但是感觉没啥亮点,也不知道要怎么描述介绍。大家可以帮我看一下简历怎么改吗?顺便能不能指导一下ppt要怎么写好紧张啊,第一次面试。
EvanderLiam:前端的技术栈不懂,所以不知道你项目和技术栈写的怎么样。但是简历别的可以说一下,首先,自我介绍没有用,全部删掉;然后,如果学历不占优可以往下移,移到最下面(虽然可能没啥帮助);再然后,技术栈可以用粗体标注关键字,让面试官可以知道哪些可以有重点的问;最后就是项目的工作内容,不要写你做了什么,不要为了用而用,而是遇到了什么场景,使用了什么技术,解决了什么问题,最后效果如何(最好有量化的指标),这是大概的思路。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务