CASE WHEN 조건식1 THEN 식1
[ WHEN 조건식2 THEN 식2 ]
[ ELSE 식3 ]
END
ELSE는 생략 가능하며 생략했을 시 'ELSE NULL'로 간주한다.
예) a열의 값이 NULL값일 때 이를 0으로 변환하고 싶을 때
SELECT a, CASE WHEN a IS NULL THEN 0 END "a(null=0)" FROM table;
결과)
a | a(null=0) |
1 | 1 |
2 | 2 |
NULL | 0 |
NULL값을 변환할 때는 COALESCE 함수 사용 가능하다.
SELECT a, COALESCE(a, 0) FROM table;
NULL이 아니면 첫 번째 인수의 값을 반환(a열 값)
NULL인 경우 두 번째 인수의 값을 반환(0)
서로 다른 형식의 CASE문
SELECT a "코드",
CASE
WHEN a=1 THEN '남자'
WHEN a=2 THEN '여자'
WHEN a IS NULL THEN '데이터 없음'
ELSE '미지정'
END "성별" FROM table;
SELECT a "코드",
CASE a
WHEN 1 THEN '남자'
WHEN 2 THEN '여자'
/* WHEN NULL THEN '데이터 없음' <- 이 경우는 a = NULL 연산을 하기 때문에 NULL 값이라 하더라도 참이 되지 않아 '미지정' 값이 나온다.*/
ELSE '미지정'
END "성별" FROM table;
두 번째 방식으로는 NULL 값을 비교할 수 없다.
그래서 NULL값 변환 시에는 SQL표준인 COALESCE 함수를 사용!
CASE문은 SELECT 구 뿐만아니라 WHERE 구, ORDER BY 구 등 여러 군데에서 사용 가능하며,
ELSE 문은 생략 시 NULL로 간주되기 때문에 되도록이면 생략하지 않는 것이 낫다.
'CS > DB' 카테고리의 다른 글
집계함수 - COUNT / SUM / AVG / MIN / MAX (0) | 2021.12.03 |
---|---|
데이터 추가, 갱신, 삭제 - INSERT / UPDATE / DELETE (0) | 2021.12.03 |
연산 (0) | 2021.12.03 |
결과 행 제한(LIMIT OFFSET) (0) | 2021.12.03 |
정렬 (ORDER BY) (0) | 2021.12.03 |
댓글