CASE 条件表达式 - Amazon Redshift

CASE 条件表达式

CASE 表达式是一种条件表达式,类似于其他语言中发现的 if/then/else 语句。CASE 用于指定存在多个条件时的结果。在 SQL 表达式有效的情况下使用 CASE,例如在 SELECT 命令中。

有两种类型的 CASE 表达式:简单和搜索。

  • 在简单 CASE 表达式中,将一个表达式与一个值比较。在找到匹配项时,将应用 THEN 子句中的指定操作。如果未找到匹配项,则应用 ELSE 子句中的操作。

  • 在搜索 CASE 表达式中,基于布尔表达式计算每个 CASE,而且 CASE 语句会返回第一个匹配的 CASE。如果在 WHEN 子句中未找到匹配,则返回 ELSE 子句中的操作。

语法

用于匹配条件的简单 CASE 语句:

CASE expression WHEN value THEN result [WHEN...] [ELSE result] END

用于计算每个条件的搜索 CASE 语句:

CASE WHEN condition THEN result [WHEN ...] [ELSE result] END

参数

expression

一个列名称或任何有效的表达式。

与该表达式比较的值,如数字常数或字符串。

result

计算表达式或布尔条件时返回的目标值或表达式。所有结果表达式的数据类型必须可转换为单一输出类型。

condition

计算结果为 true 或 false 的 Boolean 表达式。如果 condition 为 true,则 CASE 表达式的值是符合条件的结果,不处理 CASE 表达式的其余部分。如果 condition 为 false,则计算任何后续的 WHEN 子句。如果没有 WHEN 条件结果为 true,则 CASE 表达式的值是 ELSE 子句的结果。如果没有 ELSE 子句且没有条件为 true,则结果为 null。

示例

以下示例使用 TICKIT 样本数据中的 VENUE 表和 SALES 表。有关更多信息,请参阅 示例数据库

使用简单 CASE 表达式在针对 VENUE 表的查询中将 New York City 替换为 Big Apple。将所有其他城市名称替换为 other

select venuecity, case venuecity when 'New York City' then 'Big Apple' else 'other' end from venue order by venueid desc; venuecity | case -----------------+----------- Los Angeles | other New York City | Big Apple San Francisco | other Baltimore | other ...

使用搜索 CASE 表达式来基于单个门票销售的 PRICEPAID 值分配组编号:

select pricepaid, case when pricepaid <10000 then 'group 1' when pricepaid >10000 then 'group 2' else 'group 3' end from sales order by 1 desc; pricepaid | case ----------+--------- 12624 | group 2 10000 | group 3 10000 | group 3 9996 | group 1 9988 | group 1 ...