SQL Advanced: CASE-WHEN

하하호호훈이·2025년 5월 30일

SQL(MySQL) MUST KNOW

목록 보기
19/23
post-thumbnail

이번 포스팅에서는 SQL에서 조건에 따라 서로 다른 값을 반환할 수 있는 CASE WHEN 조건문을 알아봅시다. 사실 프로그래밍의 if-else 구문과 비슷하게 작동하기 때문에, 집계, 라벨링, 그룹 분류 등에 매우 유용합니다.

💡 모든 예시는 company_dbemployees, projects 테이블 기반입니다.


✅ CASE WHEN 기본 구조

CASE
  WHEN 조건1 THEN 결과1
  WHEN 조건2 THEN 결과2
  ELSE 기본값
END
  • CASE는 SQL의 조건 분기문입니다.
  • THEN 뒤에 반환할 값이나 식을 작성합니다.
  • ELSE는 모든 조건을 만족하지 않을 때 반환할 값입니다.

1. 예제 ① 급여 등급 분류

SELECT first_name, salary,
  CASE
    WHEN salary >= 7000 THEN 'High'
    WHEN salary >= 5000 THEN 'Medium'
    ELSE 'Low'
  END AS salary_grade
FROM employees;

예시 결과:

first_namesalarysalary_grade
Alice6500.50Medium
Bob5400.00Medium
Charlie7100.00High
Diana4300.75Low

2. 예제 ② 부서별 라벨 부여

SELECT first_name, department,
  CASE department
    WHEN 'Engineering' THEN '기술직'
    WHEN 'Marketing' THEN '마케팅'
    WHEN 'HR' THEN '관리'
    ELSE '기타'
  END AS dept_label
FROM employees;

예시 결과:

first_namedepartmentdept_label
AliceEngineering기술직
BobMarketing마케팅
DianaHR관리

3. 예제 ③ 프로젝트 예산 등급 분류

SELECT project_name, budget,
  CASE
    WHEN budget >= 90000 THEN 'A'
    WHEN budget >= 70000 THEN 'B'
    WHEN budget >= 50000 THEN 'C'
    ELSE 'D'
  END AS budget_rank
FROM projects;

예시 결과:

project_namebudgetbudget_rank
AI Platform100000.00A
Data Lake80000.00B
Automation60000.00C
Rebranding40000.00D

4. 예제 ④ 조건별 다른 수식 적용 (가중치 계산)

SELECT first_name, department, salary,
  salary *
    CASE
      WHEN department = 'Engineering' THEN 1.2
      WHEN department = 'HR' THEN 1.1
      ELSE 1.0
    END AS adjusted_salary
FROM employees;

예시 결과:

first_namedepartmentsalaryadjusted_salary
AliceEngineering6500.507800.60
BobMarketing5400.005400.00
CharlieEngineering7100.008520.00
DianaHR4300.754730.83

5. 예제 ⑤ 조건별 개수 세기 (집계 CASE WHEN)

SELECT
  COUNT(CASE WHEN department = 'Engineering' THEN 1 END) AS engineering_count,
  COUNT(CASE WHEN department = 'HR' THEN 1 END) AS hr_count
FROM employees;

예시 결과:

engineering_counthr_count
21

✅ 정리 요약: CASE WHEN 핵심 포인트

특징설명
조건 분기WHEN 조건 THEN 결과로 조건별 값 반환
범주화수치나 문자열에 따라 그룹 또는 등급 지정 가능
컬럼 기준 분기CASE 컬럼명 WHEN 값 THEN 결과로 단순화 가능
수식 안 활용salary * CASE WHEN ... 등 동적 수식으로 응용 가능
집계 함수와 활용SUM(CASE WHEN ...) 구조로 조건부 집계 가능

다음 파트에서는 문자열 집계 함수 GROUP_CONCAT()을 통해 여러 값을 하나의 문자열로 결합하는 방법을 알아볼게요! 그럼 👋

profile
AI, Data Science/Analysis 리뷰용가리지용 😆

0개의 댓글