본문 바로가기
기획자가 알아야 할 IT지식/기획자가 알아야 할 SQL

20강. 조건에 따라 다른 값을 반환하는 CASE WHEN 문

by 일잘러로 살기 2025. 3. 23.

SQL에서 조건에 따라 다른 값을 반환하고 싶을 때 사용하는 것이 CASE WHEN 문입니다.
CASE WHEN 문은 IF-ELSE 조건문과 유사하며, 데이터 값이나 특정 연산 결과에 따라 원하는 값을 반환할 수 있습니다.


✅ 1. CASE WHEN 기본 문법

SELECT 컬럼명,
       CASE
           WHEN 조건1 THEN 반환값1
           WHEN 조건2 THEN 반환값2
           ELSE 기본값
       END AS 별칭
  FROM 테이블명;


📌 문법 설명

  • WHEN 조건 THEN 반환값 → 조건이 만족하면 해당 값을 반환
  • ELSE 기본값 → 모든 조건이 만족하지 않을 때 기본값 반환
  • END → CASE 문 종료
  • AS 별칭 → 컬럼명 변경 가능

✅ 2. CASE WHEN 예제

📌 2-1. 직원의 급여 등급을 나누는 예제

SELECT employee_id, name, salary,
       CASE
           WHEN salary >= 5000000 THEN '고소득자'
           WHEN salary >= 3000000 THEN '중간소득자'
           ELSE '저소득자'
       END AS salary_grade
  FROM employees;


📌 실행 결과

설명:

  • 급여가 5,000,000 이상이면 '고소득자'
  • 3,000,000 이상이면 '중간소득자'
  • 그 외에는 '저소득자'

📌 2-2. 성과 보너스 지급 여부 결정하기

SELECT employee_id, name, performance_score,
       CASE
           WHEN performance_score >= 90 THEN '보너스 100%'
           WHEN performance_score >= 80 THEN '보너스 50%'
           WHEN performance_score >= 70 THEN '보너스 20%'
           ELSE '보너스 없음'
       END AS bonus_status
  FROM employees;


📌 실행 결과

설명:

  • 성과 점수(performance_score)가 90점 이상이면 '보너스 100%'
  • 80점 이상이면 '보너스 50%'
  • 70점 이상이면 '보너스 20%'
  • 그 외에는 '보너스 없음'

✅ 3. CASE WHEN과 함께 사용하는 연산자

📌 3-1. BETWEEN을 사용한 예제

BETWEEN 연산자를 활용하면 범위를 더욱 직관적으로 표현할 수 있습니다.

SELECT employee_id, name, salary,
       CASE
           WHEN salary BETWEEN 5000000 AND 7000000 THEN '고소득자'
           WHEN salary BETWEEN 3000000 AND 4999999 THEN '중간소득자'
           ELSE '저소득자'
       END AS salary_grade
  FROM employees;

BETWEEN A AND B → A 이상 B 이하


📌 3-2. IN을 사용한 예제

IN 연산자를 활용하면 여러 값을 그룹화할 수 있습니다.

SELECT employee_id, name, department,
       CASE
           WHEN department IN ('영업', '마케팅') THEN '영업 부서'
           WHEN department IN ('개발', 'IT') THEN '기술 부서'
           ELSE '기타 부서'
       END AS department_group
  FROM employees;

'영업' 또는 '마케팅' 부서면 '영업 부서'로 분류
'개발' 또는 'IT' 부서면 '기술 부서'로 분류
그 외는 '기타 부서'


✅ 4. CASE WHEN을 활용한 NULL 처리

NVL과 비슷하게 CASE WHEN을 사용하면 NULL 값을 특정 값으로 변환할 수도 있습니다.

SELECT employee_id, name, commission,
       CASE
           WHEN commission IS NULL THEN '수당 없음'
           ELSE '수당 있음'
       END AS commission_status
  FROM employees;

NULL 값을 '수당 없음'으로 처리


✅ 5. CASE WHEN을 활용한 집계 연산

CASE 문을 사용하면 특정 조건을 만족하는 값만 합산할 수도 있습니다.

SELECT
    SUM(CASE WHEN department = '영업' THEN salary ELSE 0 END) AS sales_salary_total,
    SUM(CASE WHEN department = '개발' THEN salary ELSE 0 END) AS dev_salary_total
  FROM employees;

'영업' 부서의 급여 합계와 '개발' 부서의 급여 합계를 따로 계산


✅ 6. CASE WHEN vs DECODE 차이점

CASE WHEN과 비슷한 기능을 하는 DECODE 함수도 있지만, 차이점이 있습니다.

📌 DECODE 예제

SELECT employee_id, name,
       DECODE(department, '영업', '영업 부서', '개발', '기술 부서', '기타 부서') AS department_group
  FROM employees;

DECODE는 특정 컬럼값을 기준으로 변환할 때 간편하지만, 비교 연산자가 없어 유연성이 떨어짐.
따라서 일반적으로는 CASE WHEN이 더 많이 사용됨.


✅ 7. 정리

✅ CASE WHEN 문은 SQL에서 조건에 따라 다른 값을 반환할 때 사용
✅ WHEN 조건 THEN 반환값을 설정하고, 모든 조건이 만족하지 않으면 ELSE 값 반환
✅ BETWEEN, IN, IS NULL 같은 연산자와 함께 사용 가능
✅ SUM(CASE WHEN ...) 형태로 집계 연산에도 활용 가능
✅ DECODE보다 더 유연하고 다양한 조건을 처리할 수 있음