使用 CASE 进行 SUM
本课属于 Coddy SQL 学习旅程的“进阶内容”单元。第 13 课,共 27 课。
同样的思路也适用于 SUM,而且它更加灵活。CASE 可以对匹配的行返回 1,对其他行返回 0,也可以返回任意数值,从而为不同的行赋予不同的权重。
SELECT
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM usersSUM(CASE … THEN 1 ELSE 0 END) 和 COUNT(CASE … THEN 1 END) 用于计数时结果相同,你可以选择团队偏好的写法。
挑战
简单可用的表和列:
transactions:id,category,type,amount
type 可以是 'sale' 或 'refund'。对于每个 category,返回:
categorynet_revenue:销售金额总和减去退款金额总和
使用单个 SUM(CASE …) 表达式计算 net_revenue,其中退款金额以负数计入。按 net_revenue 降序排序。
亲手试试
SELECT category,
-- 用一个 SUM(CASE ...) 计算,退款按负数计入
FROM transactions
GROUP BY category
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
进阶内容中的所有课
自己练习: SQL 在线编辑器