跳到主要内容

条件表达式

条件表达式在一条 SQL 中根据输入选择结果。它们看起来像函数,但 CASE、COALESCE 等有专门语法;以下以 PostgreSQL 为准。

CASE:按条件选值​

SELECT amount,
CASE
WHEN amount >= 1000 THEN 'large'
WHEN amount >= 100 THEN 'medium'
ELSE 'small'
END AS size
FROM orders;

从上到下选第一个为真的分支;WHEN 为未知也不会被选中。省略 ELSE 时无匹配返回 NULL。简单形式 CASE status WHEN 'paid' THEN ... END 比较单一表达式;可空值不能靠 WHEN NULL 匹配,应使用搜索形式 WHEN status IS NULL。

空值处理​

SELECT coalesce(NULL, '', 'fallback'); -- 空字符串
SELECT nullif(0, 0); -- NULL
SELECT 10 / nullif(0, 0); -- NULL,避免除零

COALESCE 返回第一个非 SQL NULL 的参数,空字符串、0、false 都不是空值;NULLIF(a, b) 在两者相等时返回 NULL,否则返回 a。各分支或参数需要能转换为兼容的结果类型。

极值与执行边界​

GREATEST(3, 7, 5) 返回 7,LEAST 返回 3;PostgreSQL 忽略其中的 NULL 参数,全部为 NULL 才返回 NULL。它们比较同一行中的值,跨行汇总应使用 MAX、MIN。

CASE 通常只计算选中的结果分支,但计划阶段的常量折叠等可能使明显错误的常量表达式提前报错;不要用它作为对任意危险表达式的绝对求值屏障。COALESCE 也不应掩盖本应与空字符串、零区分的缺失数据。