

# 条件関数
<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` 式には、簡易と検索の 2 種類があります。

簡易 `CASE` 式では、式は値と比較されます。一致が検出された場合、`THEN` 句で指定されたアクションが適用されます。一致が検出されない場合、`ELSE` 句のアクションが適用されます。

検索 `CASE` 式では、各 `CASE` がブール式に基づいて評価され、`CASE` ステートメントが最初の一致する `CASE` を返します。一致する `CASE` が `WHEN` 句で検出されない場合、`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` は、引数を順に評価し、最初の不明でない値 (最初の非 Null 値または欠落していない値) を返します。この関数は、Null および欠落している値を伝達しません。

### 構文
<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>

2 つの式があり、2 つの式が同じ値に評価される場合、`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
```