

# 조건 함수
<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` 표현식은 단순(simple)과 검색(searched), 두 가지 유형이 있습니다.

단순 `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`는 인수를 순서대로 평가하여 알 수 없는 첫 번째 값, 즉 첫 번째 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>

두 개의 표현식이 주어질 경우 그 두 표현식이 같은 값으로 평가된다면 `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
```