이번 포스팅에서는 SQL에서 조건에 따라 서로 다른 값을 반환할 수 있는 CASE WHEN 조건문을 알아봅시다. 사실 프로그래밍의 if-else 구문과 비슷하게 작동하기 때문에, 집계, 라벨링, 그룹 분류 등에 매우 유용합니다.
💡 모든 예시는 company_db의 employees, 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_name | salary | salary_grade |
|---|
| Alice | 6500.50 | Medium |
| Bob | 5400.00 | Medium |
| Charlie | 7100.00 | High |
| Diana | 4300.75 | Low |
2. 예제 ② 부서별 라벨 부여
SELECT first_name, department,
CASE department
WHEN 'Engineering' THEN '기술직'
WHEN 'Marketing' THEN '마케팅'
WHEN 'HR' THEN '관리'
ELSE '기타'
END AS dept_label
FROM employees;
예시 결과:
| first_name | department | dept_label |
|---|
| Alice | Engineering | 기술직 |
| Bob | Marketing | 마케팅 |
| Diana | HR | 관리 |
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_name | budget | budget_rank |
|---|
| AI Platform | 100000.00 | A |
| Data Lake | 80000.00 | B |
| Automation | 60000.00 | C |
| Rebranding | 40000.00 | D |
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_name | department | salary | adjusted_salary |
|---|
| Alice | Engineering | 6500.50 | 7800.60 |
| Bob | Marketing | 5400.00 | 5400.00 |
| Charlie | Engineering | 7100.00 | 8520.00 |
| Diana | HR | 4300.75 | 4730.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_count | hr_count |
|---|
| 2 | 1 |
✅ 정리 요약: CASE WHEN 핵심 포인트
| 특징 | 설명 |
|---|
| 조건 분기 | WHEN 조건 THEN 결과로 조건별 값 반환 |
| 범주화 | 수치나 문자열에 따라 그룹 또는 등급 지정 가능 |
| 컬럼 기준 분기 | CASE 컬럼명 WHEN 값 THEN 결과로 단순화 가능 |
| 수식 안 활용 | salary * CASE WHEN ... 등 동적 수식으로 응용 가능 |
| 집계 함수와 활용 | SUM(CASE WHEN ...) 구조로 조건부 집계 가능 |
다음 파트에서는 문자열 집계 함수 GROUP_CONCAT()을 통해 여러 값을 하나의 문자열로 결합하는 방법을 알아볼게요! 그럼 👋