Menu
CoddyTech

使用 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 users

SUM(CASE … THEN 1 ELSE 0 END) 和 COUNT(CASE … THEN 1 END) 用于计数时结果相同,你可以选择团队偏好的写法。

challenge icon

挑战

简单

可用的表和列:

  • transactions:id,category,type,amount

type 可以是 'sale' 或 'refund'。对于每个 category,返回:

  • category
  • net_revenue:销售金额总和减去退款金额总和

使用单个 SUM(CASE …) 表达式计算 net_revenue,其中退款金额以负数计入。按 net_revenue 降序排序。

亲手试试

SELECT category,
       -- 用一个 SUM(CASE ...) 计算,退款按负数计入
FROM transactions
GROUP BY category
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

进阶内容中的所有课

自己练习: SQL 在线编辑器