题解 | #获得积分最多的人(三)#
获得积分最多的人(三)
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,得不到想要的结果