CASE 是 SQL 的条件表达式——它基于条件返回不同的值,就像查询中的 if/else。它用于 SELECT(计算列/条件列)、ORDER BY、聚合函数等——为查询添加条件逻辑。
SELECT 中的 CASE——条件列
sql
name,
age,
age
age
age_group
users;
CASE 是 SQL 的条件表达式——它基于条件返回不同的值,就像查询中的 if/else。它用于 SELECT(计算列/条件列)、ORDER BY、聚合函数等——为查询添加条件逻辑。
name,
age,
age
age
age_group
users;
searched CASE 按顺序评估条件,返回第一个匹配 WHEN 的值。ELSE 提供默认值(没有它,不匹配的行得到 NULL)。
SELECT name,
CASE status -- simple form — compares `status` to each value
WHEN 'A' THEN 'Active'
WHEN 'I' THEN 'Inactive'
ELSE 'Unknown'
END AS status_label
FROM users;
-- count/sum conditionally (a very useful pattern)
SELECT
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count,
COUNT(CASE WHEN status = 'inactive' THEN 1 END) AS inactive_count,
SUM(CASE WHEN type = 'sale' THEN amount ELSE 0 END) AS sales_total
FROM orders;
-- → multiple conditional counts/sums in ONE query (pivoting-like)
在聚合函数内使用 CASE 允许你在单个查询中计算多个条件计数或求和——这是报表的强大技术(有效地透视数据)。
ORDER BY CASE status
WHEN 'urgent' THEN 1
WHEN 'normal' THEN 2
ELSE 3
END; -- custom priority sort
CASE 表达式是一个多功能的、常见需要的 SQL 功能,用于为查询添加条件逻辑——直接在 SQL 中转换、分类和有条件地计算值,因此理解它对于实际查询和报表工作很有价值。
了解如何在 SELECT 中使用 CASE(创建条件/计算列——如将年龄分组、将代码映射到标签)是塑造查询输出的常见需求。
特别强大的是在聚合函数内使用 CASE(条件计数和求和——如在一个查询中计数活跃与非活跃、或仅求和某些类型)——这是报表和分析的关键技术,有效地透视数据,在单个高效查询中计算多个条件指标。ORDER BY 中的 CASE 支持自定义排序顺序(基于优先级的排序)。
理解 searched 形式(评估条件)和 simple 形式(匹配值),以及 CASE 适用的各种上下文,涵盖了实际用途。
由于添加条件逻辑——分类数据、用于报表的条件聚合、自定义排序——在查询中是常见需求,特别是在报表/分析中,而且 CASE 是在 SQL 中直接表达此逻辑的标准、灵活方式(避免为简单转换将数据提取到应用程序代码中),掌握 CASE 表达式是有用的、常用的知识,为查询增添表现力,特别是对于 SQL 报表和数据分析中的条件聚合模式很有价值。