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

获得积分最多的人(三)

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

最近在练习CTE 准备把做过的中等及其以上难度的题目中 子查询都改成 WITH query 这题 用CTE解法 如下

WITH grade_total AS(
    SELECT user_id, 
        SUM(CASE
           WHEN type='add' THEN grade_num*1
           WHEN type='reduce' THEN grade_num*-1
           ELSE 0 
           END) as grade_sum FROM grade_info
    GROUP BY user_id),
    rank_grade AS(
        SELECT grade_total.user_id, grade_total.grade_sum, 
        RANK() OVER(ORDER BY grade_total.grade_sum DESC) as cnt
        FROM grade_total)
SELECT user.id, user.name, rg.grade_sum FROM user 
JOIN rank_grade rg ON user.id=rg.user_id 
WHERE rg.cnt=1
ORDER BY user.id ASC
    
全部评论

相关推荐

xxxxOxo:这公司幽默得很,要了简历半天一点动静都没有,过一会就给你发个邮件让你做测试,做完又没后文了,纯溜人
点赞 评论 收藏
分享
01-29 16:08
已编辑
华南农业大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务