Menu
CoddyTech

使用 CASE 进行 COUNT

本课属于 Coddy SQL 学习旅程的“进阶内容”单元。第 12 课,共 27 课。

你可以在聚合函数中使用 CASE 表达式。关键在于,COUNT 会忽略 NULL,因此不带 ELSE 的 CASE 只会统计符合条件的行。

SELECT
    COUNT(*) AS total,
    COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users

现在,active_count 是 'active' 行的数量,尽管我们没有筛选整个查询。这就是你编写的所有多指标仪表板查询背后的技巧。

challenge icon

挑战

简单

可用的表和列:

  • orders:id,customer_id,status

针对每个 customer_id,返回:

  • customer_id
  • total:该客户下的订单总数
  • shipped:status = 'shipped' 的订单数
  • cancelled:status = 'cancelled' 的订单数

只返回至少有一个已取消订单的客户。按 customer_id 排序。

亲手试试

SELECT customer_id,
       COUNT(*) AS total,
       -- 用 COUNT(CASE ...) 统计已发货和已取消的订单
FROM orders
GROUP BY customer_id
-- 筛选至少取消过一次订单的客户
ORDER BY customer_id
quiz icon自我测试

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

进阶内容中的所有课

自己练习: SQL 在线编辑器