题解 | #获得积分最多的人(三)#
获得积分最多的人(三)
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
)
查看6道真题和解析