SQL - CASE WHEN

Ryan·2025년 1월 16일

SQL/Python 분석

목록 보기
64/94

1. CASE WHEN의 기본 개념

CASE 구문 형태

sql
코드 복사
CASE case_value
    WHEN when_value THEN result
    [WHEN when_value THEN result] ...
    [ELSE result]
END

또는

sql
코드 복사
CASE
    WHEN search_condition THEN result
    [WHEN search_condition THEN result] ...
    [ELSE result]
END
  • case_value: 비교할 대상(주로 하나의 컬럼 값)
  • when_value: 비교하고자 하는 값(=, >, LIKE 등 조건 가능)
  • search_condition: 여러 컬럼을 조합하거나 복잡한 조건식을 쓸 때 사용
  • ELSE: 모든 when 조건에 해당하지 않을 때 반환할 기본 값(옵션)

MySQL 문서: CASE 문 공식 레퍼런스


2. CASE WHEN (1) – 조건 대상 컬럼이 1개일 때

만약 조건 대상 컬럼이 하나이고, 그 컬럼 값이 특정 명확한 값으로 분류될 때 다음과 같이 작성할 수 있습니다.

sql
코드 복사
CASE fruit
    WHEN 'apple' THEN '사과'
    WHEN 'pineapple' THEN '파인애플'
    WHEN 'strawberry' THEN '딸기'
    ELSE '기타'
END AS fruit_korean
  • fruit 값이 'apple'이면 '사과', 'pineapple'이면 '파인애플' … 그 외에는 '기타'로 처리
  • ELSE 절은 선택이지만, 예외 케이스가 있을 때 처리하는 것이 좋습니다.

주의

  • 이렇게 CASE 컬럼명 WHEN 값 THEN ... 형태를 쓰면, 내부 WHEN에서는 해당 컬럼이 특정값일 때만 분기를 실행합니다.
  • WHEN fruit = 'apple' 처럼 쓰지 않고, 바로 WHEN 'apple' THEN ... 형태로 사용할 수 있습니다.

3. CASE WHEN (2) – 조건 대상 컬럼이 복수이거나 복잡한 조건일 때

예시: 여러 조건을 걸고 싶거나, 명확한 단일 값 비교가 아닐 때

sql
코드 복사
CASE
    WHEN fruit LIKE '%berry%' THEN '베리류'  -- 조건 1
    WHEN fruit IN ('Mango','Banana')
         OR fruit_cate = 'Tropical'
         THEN '열대과일류'                -- 조건 2
    ELSE '기타'
END AS fruit_cate2
  • 이처럼 WHENsearch_condition(= 조건식)을 직접 작성할 수 있습니다.
  • LIKE, IN, OR, ANDSQL 논리연산자를 활용해 복합 조건을 구현 가능.
  • fruit LIKE '%berry%' → 문자열에 'berry'가 들어있으면 ‘베리류’로 분류.

4. CASE WHEN 활용 팁

  1. 단일 컬럼 분기 vs. 복합 조건
    • 단일 컬럼 값만 보고 분기하는 경우 → CASE fruit WHEN 'apple' THEN ... 구조로 간단히
    • 여러 컬럼 조합(또는 논리연산) → CASE WHEN col1 = ... AND col2 = ... THEN ... END 형태로 검색 조건 작성
  2. ELSE 절
    • 모든 조건에 매칭되지 않는 경우를 처리하고 싶다면 ELSE를 사용
    • 미리 누락 케이스를 방지할 수 있어서 버그 예방에 좋음
  3. CASE 결과를 새 컬럼으로 표시
    • 예) CASE WHEN ... END AS new_column
    • SELECT 구문에서만 임시로 보여주거나, CREATE TABLE / INSERT INTO 에서 사용할 수도 있음
  4. CASE 중첩
    • CASE 안에 또 다른 CASE를 쓰는 복잡한 방식도 가능하지만, 가독성이 떨어질 수 있으므로 필요하면 조건을 최대한 단순화하는 편이 좋습니다.
  5. 성능
    • 일반적으로 CASE WHEN 자체가 큰 성능 부담은 아니지만, LIKE '%...' 연산 등 복합 조건이 많아지면 쿼리 최적화를 고민해야 할 수도 있음.

5. 간단 예시 쿼리

sql
코드 복사
SELECT
    fruit,
    CASE fruit
        WHEN 'apple' THEN '사과'
        WHEN 'pineapple' THEN '파인애플'
        WHEN 'strawberry' THEN '딸기'
        ELSE '기타'
    END AS fruit_korean,

    CASE
        WHEN fruit LIKE '%berry%' THEN '베리류'
        WHEN fruit IN ('Mango','Banana')
            OR fruit_cate = 'Tropical'
            THEN '열대과일류'
        ELSE '기타'
    END AS fruit_cate2

FROM my_fruits_table;
  • fruit_korean 컬럼: 컬럼값이 apple/pineapple/strawberry 중 하나인 경우 한글로 매핑, 아니면 ‘기타’
  • fruit_cate2 컬럼: 복합 조건으로 베리류, 열대과일류, 기타 분류

6. 정리

  • CASE WHEN은 SQL에서 조건 분기를 처리하는 강력한 구문으로,
    • 특정 컬럼의 값이 무엇인지,
    • 여러 컬럼의 조합이 어떤지,
    • 논리 연산(AND, OR, IN, LIKE 등)을 통해 분류할 때 유용합니다.
  • SELECT절에서 CASE ... END AS 새컬럼 형태로 새 값을 만들어낼 수 있으며,
  • ELSE 절로 예외 처리를 해두면 예상치 못한 값이 들어올 때도 안전하게 처리 가능합니다.

결국 CASE WHEN을 잘 활용하면 SQL 쿼리만으로도 간단한 로직 분기와 카테고리화를 빠르게 구현할 수 있습니다.

0개의 댓글