CASE WHEN / NULL 처리
CASE WHEN은 조건에 따라 다른 값을 반환하는 SQL의 if-else입니다. NULL은 "알 수 없는 값"이므로 일반 비교 연산자로는 처리할 수 없습니다. 조건부 값 변환과 NULL 다루기
기본 문법
-- CASE WHEN
SELECT CASE
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 기본값
END AS 별칭
FROM 테이블;
-- NULL 처리
COALESCE(컬럼, 대체값)
NULLIF(값1, 값2)예제
급여 등급 분류
CASE WHEN으로 급여 구간에 따른 등급을 매깁니다.
SELECT name, salary,
CASE
WHEN salary >= 7000000 THEN 'S등급'
WHEN salary >= 6000000 THEN 'A등급'
WHEN salary >= 5000000 THEN 'B등급'
ELSE 'C등급'
END AS 급여등급
FROM employees
ORDER BY salary DESC;COALESCE — NULL 대체
COALESCE는 첫 번째 NULL이 아닌 값을 반환합니다. department_id가 NULL이면 '미배정'으로 표시합니다.
SELECT name,
COALESCE(CAST(department_id AS TEXT), '미배정') AS 부서
FROM employees;NULLIF — 특정 값을 NULL로
NULLIF(a, b)는 a = b 이면 NULL을 반환합니다. 0으로 나누기 오류 방지에 활용됩니다.
SELECT name, salary,
-- salary가 0이면 NULL 반환 (0 나누기 방지)
salary / NULLIF(salary, 0) AS 정상여부
FROM employees;
-- CASE로 조건부 집계도 가능
SELECT
COUNT(CASE WHEN department_id = 1 THEN 1 END) AS 개발팀수,
COUNT(CASE WHEN department_id = 2 THEN 1 END) AS 마케팅팀수
FROM employees;알아두면 좋은 것
- CASE는 SELECT, WHERE, ORDER BY, GROUP BY 어디서든 사용 가능합니다.
- NULL = NULL은 UNKNOWN입니다. NULL 비교는 반드시 IS NULL / IS NOT NULL을 사용하세요.
- COALESCE(a, b, c)는 왼쪽부터 NULL이 아닌 첫 번째 값을 반환합니다.