跳到主要内容

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 的语义差别