nullジマ

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이 아닌 첫 번째 값을 반환합니다.