⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
CASE 表达式

CASE 表达式根据条件进行分支判断。其基本形式与许多编程语言中使用的三元条件表达式相同(CASE WHEN cond THEN a ELSE b END 等同于 cond ? a : b)。对于单个条件,可以使用 IF(cond, a, b) 来表示。

CREATE OR REPLACE TABLE integers AS SELECT unnest([1, 2, 3]) AS i;
SELECT i, CASE WHEN i > 2 THEN 1 ELSE 0 END AS test
FROM integers;
i 测试
1 0
2 0
3 1

这等同于

SELECT i, IF(i > 2, 1, 0) AS test
FROM integers;

CASE 表达式中的 WHEN cond THEN expr 部分可以进行链式操作,当任何条件对单个元组返回 true 时,将评估并返回相应的表达式。

CREATE OR REPLACE TABLE integers AS SELECT unnest([1, 2, 3]) AS i;
SELECT i, CASE WHEN i = 1 THEN 10 WHEN i = 2 THEN 20 ELSE 0 END AS test
FROM integers;
i 测试
1 10
2 20
3 0

CASE 表达式的 ELSE 子句是可选的。如果没有提供 ELSE 子句,并且没有条件匹配,则 CASE 表达式将返回 NULL

CREATE OR REPLACE TABLE integers AS SELECT unnest([1, 2, 3]) AS i;
SELECT i, CASE WHEN i = 1 THEN 10 END AS test
FROM integers;
i 测试
1 10
2 NULL
3 NULL

还可以在 CASE 之后但在 WHEN 之前提供一个单独的表达式。完成此操作后,CASE 表达式将有效地转换为一个 switch 语句。

CREATE OR REPLACE TABLE integers AS SELECT unnest([1, 2, 3]) AS i;
SELECT i, CASE i WHEN 1 THEN 10 WHEN 2 THEN 20 WHEN 3 THEN 30 END AS test
FROM integers;
i 测试
1 10
2 20
3 30

这等同于

SELECT i, CASE WHEN i = 1 THEN 10 WHEN i = 2 THEN 20 WHEN i = 3 THEN 30 END AS test
FROM integers;