DBGuide

CASE 표현식으로 조건부 값 처리

📖 약 1🏷 SQL 기초

CASE 표현식이란?

CASE는 SQL에서 조건에 따라 다른 값을 반환하는 표현식입니다. 프로그래밍의 if-else와 동일한 역할을 합니다.

기본 문법 — 단순 CASE

SELECT
    name,
    grade,
    CASE grade
        WHEN 'A' THEN '우수'
        WHEN 'B' THEN '양호'
        WHEN 'C' THEN '보통'
        ELSE '미흡'
    END AS grade_label
FROM students;

검색 CASE — 조건식 사용

더 유연한 방식으로, 복잡한 조건을 사용할 수 있습니다.

SELECT
    product_name,
    price,
    CASE
        WHEN price < 10000  THEN '저가'
        WHEN price < 50000  THEN '중가'
        WHEN price < 100000 THEN '고가'
        ELSE '프리미엄'
    END AS price_tier
FROM products;

집계 함수와 함께 사용

-- 부서별 직급 분포
SELECT
    department,
    COUNT(CASE WHEN level = 'junior'  THEN 1 END) AS junior_count,
    COUNT(CASE WHEN level = 'senior'  THEN 1 END) AS senior_count,
    COUNT(CASE WHEN level = 'manager' THEN 1 END) AS manager_count
FROM employees
GROUP BY department;

COUNT(CASE WHEN ... THEN 1 END) 패턴은 조건부 집계에서 매우 자주 사용됩니다. 조건이 거짓이면 NULL을 반환하고, COUNT는 NULL을 세지 않습니다.

CASE로 동적 정렬

-- 'VIP' 등급을 항상 먼저, 나머지는 이름순
SELECT name, membership
FROM customers
ORDER BY
    CASE membership WHEN 'VIP' THEN 0 ELSE 1 END,
    name;

NULL 처리와의 조합

SELECT
    order_id,
    CASE
        WHEN shipped_at IS NULL THEN '배송 준비 중'
        WHEN delivered_at IS NULL THEN '배송 중'
        ELSE '배송 완료'
    END AS shipping_status
FROM orders;

주의사항

항목 설명
평가 순서 위에서 아래로, 첫 번째 참인 조건에서 멈춤
ELSE 생략 조건이 모두 거짓이면 NULL 반환
중첩 가능 CASE 안에 CASE를 쓸 수 있으나 가독성 저하
WHERE 사용 WHERE 절에도 CASE를 쓸 수 있음

댓글

... 으로 작성됩니다

댓글을 불러오는 중...