使用 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' 行的数量,尽管我们没有筛选整个查询。这就是你编写的所有多指标仪表板查询背后的技巧。
挑战
简单可用的表和列:
orders:id,customer_id,status
针对每个 customer_id,返回:
customer_idtotal:该客户下的订单总数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
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
进阶内容中的所有课
自己练习: SQL 在线编辑器