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

获得积分最多的人(三)

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

WITH 
-- 计算用户增加的分数
temp_add AS (
    SELECT u1.id, u1.name, 
        SUM(g.grade_num) AS grade_add
    FROM user u1
    JOIN grade_info g ON u1.id = g.user_id
    WHERE type = "add"
    GROUP BY u1.id, u1.name
),
-- 计算用户减少的分数
temp_reduce AS (
    SELECT u2.id, u2.name, 
        SUM(g2.grade_num) AS grade_reduce
    FROM user u2
    JOIN grade_info g2 ON u2.id = g2.user_id
    WHERE type = "reduce"
    GROUP BY u2.id, u2.name
),
-- 计算用户最终得分
temp_total as(
    SELECT a.id, a.name, a.grade_add - COALESCE(r.grade_reduce, 0) AS grade_num
    FROM temp_add a left join temp_reduce r ON a.id = r.id
)
-- 选择最高得分用户
select * from temp_total where grade_num in(
    select max(grade_num) from temp_total
)

全部评论

相关推荐

04-02 16:49
门头沟学院 Java
_bloodstream_:我也面了科大讯飞,主管面的时候听说急招人优先考虑能尽快实习的,我说忙毕设,后面就一直没消息了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务