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

获得积分最多的人(三)

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

with ts as(
    select user_id, sum(grade_num) as s from grade_info
    where type = 'add'
    group by user_id
)
,tr as(
    select user_id, sum(grade_num) as r from grade_info
    where type = 'reduce'
    group by user_id

),
gr as( # 1 + none = none
    select id, name, ss.s-if(r is null, 0, r) as num from user u 
    left join ts ss on u.id = ss.user_id
    left join tr rr on u.id = rr.user_id
)

select id, name, num from gr
where num = (select max(num) from gr)
order by id asc


思路很清晰,选出加分的作为一个表,算出减分的作为一个表,然后加减分得到总分

尤其要注意,有的用户没有减分,那么减分表中是null,要 if(r is null, 0, r)来条件判断让它变成0,否则 5+none = none,得不到想要的结果

全部评论

相关推荐

01-04 21:30
已编辑
河南工业大学 Java
27届学院本誓死冲击...:下次再发把个人信息隐藏掉,以防有心之人。相关课程删了,荣誉奖项只留蓝桥杯,把蓝桥杯写到教育经历里,按教育经历、实习经历、项目经历、专业技能这个顺序排版
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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