CASE 표현식
CASE 표현식
CASE 표현식은 조건에 기반한 스위치를 수행해요. 기본 형태는 많은 프로그래밍 언어의 삼항 조건과 동일해요 (CASE WHEN cond THEN a ELSE b END는 cond ? a : b와 동일). 단일 조건이면 IF(cond, a, b)로 표현할 수 있어요.
출처: 문서
본문
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 | test |
|---|---|
| 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 | test |
|---|---|
| 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 | test |
|---|---|
| 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 | test |
|---|---|
| 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;
SWITCH 표현식
SWITCH 표현식은 CASE 표현식의 문법적 설탕이에요. 표현식, 값에서 결과로의 MAP, 선택적 기본값을 받아요.
CREATE OR REPLACE TABLE integers AS SELECT unnest([1, 2, 3]) AS i;
SELECT i, SWITCH(i, MAP {1: 'one', 2: 'two', 3: 'three'}) AS test
FROM integers;
| i | test |
|---|---|
| 1 | one |
| 2 | two |
| 3 | three |
세 번째 인자로 기본값을 제공할 수 있어요. 맵 키가 하나도 일치하지 않으면 이 값이 반환돼요.
SELECT i, SWITCH(i, MAP {1: 'one', 2: 'two'}, 'other') AS test
FROM integers;
| i | test |
|---|---|
| 1 | one |
| 2 | two |
| 3 | other |
더 알아보기 (Learn more)
- MAP 타입 문서에서 MAP 값을 확인해요.