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보다 더 유연하고 다양한 조건을 처리할 수 있음
'기획자가 알아야 할 IT지식 > 기획자가 알아야 할 SQL' 카테고리의 다른 글
22강. SQL에서 합계 및 개수 구하기 (SUM, COUNT) (0) | 2025.03.24 |
---|---|
21강. SQL에서 최대, 최소, 평균값 구하기 (MAX, MIN, AVG) (0) | 2025.03.23 |
19강. NULL 값을 처리하는 방법 (NVL, NVL2) (0) | 2025.03.22 |
18강. 날짜 및 숫자 데이터 변환하기 (TO_CHAR, TO_DATE) (0) | 2025.03.22 |
17강. 날짜 차이 및 월 단위 계산하기 (MONTHS_BETWEEN, ADD_MONTHS) (0) | 2025.03.22 |