# 조건식
SELECT 문에서 특정 조건에 따라 특정 결과를 얻고 싶은 경우 사용합니다.
조건식은 CASE WHEN
또는 IF
를 사용해서 만들 수 있습니다. 각 방법의 장단점에 대해 설명합니다.
# CASE WHEN
여러 조건을 설정하고 싶은 경우, 유용한 방식입니다.
특정 값이 여러 조건에 해당하는 경우, 맨 위에 작성된 조건에 먼저 적용됩니다.
TIP
조건은 멱등하게 작성하는 것을 추천합니다.
CASE
WHEN 조건1 THEN 조건1이 참일 경우 결과
WHEN 조건2 THEN 조건2가 참일 경우 결과
ELSE 그 외 조건일 경우 결과
END AS 새로운_컬럼_이름
WITH numbers AS (
SELECT
90 AS A, 2 AS B
UNION ALL
SELECT
50, 8
UNION ALL
SELECT
60, 6
UNION ALL
SELECT
50, 10
)
SELECT A, B,
CASE A
WHEN 90 THEN 'red'
WHEN 50 THEN 'blue'
ELSE 'green'
END
AS result
FROM numbers
WITH numbers AS (
SELECT
90 AS A, 2 AS B
UNION ALL
SELECT
50, 8
UNION ALL
SELECT
60, 6
UNION ALL
SELECT
50, 10
)
SELECT A, B,
CASE
WHEN A > 60 THEN 'red'
WHEN A > 30 THEN 'blue'
ELSE 'green'
END
AS result
FROM numbers
# IF
조건이 하나일 경우 유용한 방식입니다.
- 문법 : IF(조건, 조건이 참일 경우 결과, 조건이 참이 아닐 경우 결과)
SELECT
IF(1=1, '동일한 결과', '동일하지 않은 결과') as result1,
IF(1=2, '동일한 결과', '동일하지 않은 결과') as result2
WITH numbers AS (
SELECT
90 AS A, 2 AS B
UNION ALL
SELECT
50, 8
UNION ALL
SELECT
60, 6
UNION ALL
SELECT
50, 10
)
SELECT
A, B,
IF(A<B, True, False) as result
FROM numbers
# IFNULL
조건이 NULL일 경우와 아닌 경우를 나누고 싶을 경우 사용합니다.
- IFNULL(조건, NULL일 경우 결과)
조건이 NULL이 아니면 조건의 결과를 출력하고, NULL이면 NULL일 경우 결과를 출력합니다.
SELECT
IFNULL(NULL, 0) AS if_expr_is_null,
IFNULL(10, 0) AS if_expr_is_not_null
# NULLIF
A=B일 경우 NULL을 반환하고, 그 외엔 A를 반환하고 싶은 경우 사용합니다.
- NULLIF(A, B)
SELECT
NULLIF(0, 0) AS a_is_the_same_as_b,
NULLIF(10, 0) AS a_is_not_the_same_as_b