PostgreSQL 条件表达式教程
条件表达式让 SQL 具备分支与空值处理能力:CASE 做多分支判断,COALESCE / NULLIF / GREATEST / LEAST 处理 NULL 与极值。
本篇内容
- CASE 的两种形式(简单 / 搜索)
- COALESCE:返回第一个非空值
- NULLIF:相等时返回 NULL
- GREATEST / LEAST
CASE
-- 简单 CASE(等值匹配)
SELECT name,
CASE status
WHEN 0 THEN '禁用'
WHEN 1 THEN '正常'
ELSE '未知'
END AS status_text
FROM users;
-- 搜索 CASE(任意条件,可跨列)
SELECT name, age,
CASE
WHEN age < 18 THEN '未成年'
WHEN age >= 60 THEN '老年'
ELSE '成年'
END AS age_group
FROM users;
COALESCE 与 NULLIF
-- 取第一个非空值(常用于默认展示)
SELECT name, COALESCE(nickname, name, '匿名') AS display_name FROM users;
-- 相等时返回 NULL(常用于把空串归一成 NULL)
SELECT NULLIF(bio, '') AS bio FROM users;
GREATEST / LEAST
SELECT GREATEST(1, 5, 3); -- 5
SELECT LEAST(1, 5, 3); -- 1
-- 任一参数为 NULL 时返回 NULL
待补充(TODO)
- 补充:CASE 在聚合与窗口查询中的组合用法
- 补充:COALESCE 与 CASE 在索引/过滤条件中的可索引性差异
- 补充:条件聚合(FILTER (WHERE …))的写法
- 补充:三值逻辑下 COALESCE 与 IS NOT NULL 的语义差别