

# 条件函数
<a name="s3-select-sql-reference-conditional"></a>

**重要**  
不再向新客户提供 Amazon S3 Select。Amazon S3 Select 的现有客户可以像往常一样继续使用该功能。[了解详情](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select 支持以下条件函数。

**Topics**
+ [CASE](#s3-select-sql-reference-case)
+ [COALESCE](#s3-select-sql-reference-coalesce)
+ [NULLIF](#s3-select-sql-reference-nullif)

## CASE
<a name="s3-select-sql-reference-case"></a>

`CASE` 表达式是一种条件表达式，类似于其他语言中的 `if/then/else` 语句。`CASE` 用于指定存在多个条件时的结果。有两种类型的 `CASE` 表达式：简单和搜索。

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

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

### 语法
<a name="s3-select-sql-reference-case-syntax"></a>

**注意**  
目前，Amazon S3 Select 不支持 `ORDER BY` 或包含新行的查询。请确保使用不带换行符的查询。

以下是用于匹配条件的简单 `CASE` 语句：

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

以下是用于计算每个条件的搜索 `CASE` 语句：

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

### 示例
<a name="s3-select-sql-reference-case-examples"></a>

**注意**  
如果您使用 Amazon S3 控制台运行以下示例，并且 CSV 文件包含标题行，请选择**排除第一行 CSV 数据**。

**示例 1：**使用简单 `CASE` 表达式以在查询中将 `New York City` 替换为 `Big Apple`。将所有其他城市名称替换为 `other`。

```
SELECT venuecity, CASE venuecity WHEN 'New York City' THEN 'Big Apple' ELSE 'other' END FROM S3Object;
```

查询结果：

```
venuecity        |   case
-----------------+-----------
Los Angeles      | other
New York City    | Big Apple
San Francisco    | other
Baltimore        | other
...
```

**示例 2：**使用搜索 `CASE` 表达式来基于单个门票销售的 `pricepaid` 值分配组编号：

```
SELECT pricepaid, CASE WHEN CAST(pricepaid as FLOAT) < 10000 THEN 'group 1' WHEN CAST(pricepaid as FLOAT) > 10000 THEN 'group 2' ELSE 'group 3' END FROM S3Object;					
```

查询结果：

```
pricepaid |  case
-----------+---------
12624.00 | group 2
10000.00 | group 3
10000.00 | group 3
9996.00 | group 1
9988.00 | group 1
...
```

## COALESCE
<a name="s3-select-sql-reference-coalesce"></a>

`COALESCE` 按顺序评估参数并返回第一个非未知值，即第一个非空或非缺失值。此函数无法传播空值和缺失值。

### 语法
<a name="s3-select-sql-reference-coalesce-syntax"></a>

```
COALESCE ( expression, expression, ... )
```

### 参数
<a name="s3-select-sql-reference-coalesce-parameters"></a>

 *`expression`*   
对其执行函数的目标表达式。

### 示例
<a name="s3-select-sql-reference-coalesce-examples"></a>

```
COALESCE(1)                -- 1
COALESCE(null)             -- null
COALESCE(null, null)       -- null
COALESCE(missing)          -- null
COALESCE(missing, missing) -- null
COALESCE(1, null)          -- 1
COALESCE(null, null, 1)    -- 1
COALESCE(null, 'string')   -- 'string'
COALESCE(missing, 1)       -- 1
```

## NULLIF
<a name="s3-select-sql-reference-nullif"></a>

给定两个表达式，如果两个表达式的计算结果为相同值，则 `NULLIF` 返回 `NULL`；否则 `NULLIF` 返回第一个表达式的计算结果。

### 语法
<a name="s3-select-sql-reference-nullif-syntax"></a>

```
NULLIF ( expression1, expression2 )
```

### 参数
<a name="s3-select-sql-reference-nullif-parameters"></a>

 `expression1, expression2`   
对其执行函数的目标表达式。

### 示例
<a name="s3-select-sql-reference-nullif-examples"></a>

```
NULLIF(1, 1)             -- null
NULLIF(1, 2)             -- 1
NULLIF(1.0, 1)           -- null
NULLIF(1, '1')           -- 1
NULLIF([1], [1])         -- null
NULLIF(1, NULL)          -- 1
NULLIF(NULL, 1)          -- null
NULLIF(null, null)       -- null
NULLIF(missing, null)    -- null
NULLIF(missing, missing) -- null
```