SQL에서 CASE 문은 조건에 따라 다른 값을 반환할 때 사용됩니다.
IF 문과 비슷한 역할을 하며, 동적 값 변환, 그룹핑, 다양한 조건 처리에 유용합니다.
이번 글에서는 CASE 문을 쉽게 이해하고 실무에서 활용할 수 있도록 예제와 함께 설명하겠습니다! 😊
🔹 1. CASE 문 기본 개념
📌 CASE 문은 조건에 따라 특정 값을 반환하는 SQL의 제어문입니다.
✔ IF-ELSE 구조와 비슷하며, 다양한 데이터 변환과 그룹핑이 가능합니다.
✅ CASE 문 기본 문법
CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 기본값
END
✔ WHEN → 조건을 설정
✔ THEN → 조건이 참일 때 반환할 값
✔ ELSE → 모든 조건이 거짓일 경우 반환할 기본값 (생략 가능)
🔹 2. 예제 테이블 & 데이터 생성
📌 직원(employee) 테이블
emp_id | name | dept | salary |
1 | 홍길동 | IT | 5000 |
2 | 김영희 | HR | 3000 |
3 | 박철수 | IT | 7000 |
4 | 이민호 | Sales | 4000 |
5 | 정지수 | HR | 3500 |
🔹 3. CASE 문으로 값 변환하기
✅ 부서별 이름 변환 (IT → "기술팀", HR → "인사팀", Sales → "영업팀")
SELECT
name,
dept,
CASE
WHEN dept = 'IT' THEN '기술팀'
WHEN dept = 'HR' THEN '인사팀'
WHEN dept = 'Sales' THEN '영업팀'
ELSE '기타'
END AS dept_korean
FROM employee;
🔹 결과
name | dept | dept_korean |
홍길동 | IT | 기술팀 |
김영희 | HR | 인사팀 |
박철수 | IT | 기술팀 |
이민호 | Sales | 영업팀 |
정지수 | HR | 인사팀 |
✔ CASE 문을 사용해 영어 부서명을 한글로 변환
🔹 4. CASE 문으로 그룹핑하기
✅ 급여에 따라 직원 등급 부여 (7000 이상 → "고급", 4000~6999 → "중급", 4000 미만 → "초급")
SELECT
name,
salary,
CASE
WHEN salary >= 7000 THEN '고급'
WHEN salary >= 4000 THEN '중급'
ELSE '초급'
END AS salary_grade
FROM employee;
🔹 결과
name | salary | salary_grade |
홍길동 | 5000 | 중급 |
김영희 | 3000 | 초급 |
박철수 | 7000 | 고급 |
이민호 | 4000 | 중급 |
정지수 | 3500 | 초급 |
✔ CASE 문을 사용해 급여 범위별로 "고급", "중급", "초급"으로 그룹핑
🔹 5. CASE 문으로 집계(Grouping)하기
📌 급여 등급별 직원 수 집계
SELECT
CASE
WHEN salary >= 7000 THEN '고급'
WHEN salary >= 4000 THEN '중급'
ELSE '초급'
END AS salary_grade,
COUNT(*) AS emp_count
FROM employee
GROUP BY
CASE
WHEN salary >= 7000 THEN '고급'
WHEN salary >= 4000 THEN '중급'
ELSE '초급'
END;
🔹 결과
salary_grade | emp_count |
고급 | 1 |
중급 | 2 |
초급 | 2 |
✔ GROUP BY와 함께 사용하면 CASE 문으로 그룹핑 후 집계 가능
🔹 6. CASE 문과 ORDER BY 사용
📌 직원 데이터를 급여 등급 순서대로 정렬하기 ("고급" → "중급" → "초급")
SELECT
name,
salary,
CASE
WHEN salary >= 7000 THEN '고급'
WHEN salary >= 4000 THEN '중급'
ELSE '초급'
END AS salary_grade
FROM employee
ORDER BY
CASE
WHEN salary >= 7000 THEN 1 -- "고급"을 최우선 정렬
WHEN salary >= 4000 THEN 2 -- "중급"을 그다음 정렬
ELSE 3 -- "초급"을 마지막 정렬
END;
✔ CASE 문을 ORDER BY와 함께 사용하여 사용자 정의 정렬 가능
🔹 7. CASE 문 활용 요약
활용 사례 | 설명 |
값 변환 | 부서명 변환 (예: "IT" → "기술팀") |
그룹핑 | 급여 등급 구분 (예: "7000 이상 → 고급") |
집계 | 급여 등급별 직원 수 계산 |
정렬 | 급여 등급 순서대로 정렬 |
✔ CASE 문은 SQL에서 조건별 데이터를 변환하거나 그룹화할 때 필수적!
✔ 집계, 정렬과 함께 사용하면 더 강력한 SQL 쿼리를 작성할 수 있음!
🔹 8. 실전 연습 문제
다음 SQL을 직접 작성해보세요!
1️⃣ 직원들의 연차(years_worked)에 따라 "신입", "경력", "베테랑" 그룹을 나누는 SQL 작성
2️⃣ 상품 테이블(product)에서 가격(price)이 10,000원 이상이면 "고가", 5,000~9,999원이면 "중가", 그 이하면 "저가"로 분류하는 SQL 작성
3️⃣ 학생 점수(grade)에 따라 A/B/C/D/F 등급을 매기는 SQL 작성
정답을 댓글로 남겨주세요! 😊✨
👉 CASE 문을 직접 사용해보면서 익혀보세요! 🚀
'개발 > SQL' 카테고리의 다른 글
데이터 타입과 변환: TO_DATE(), TO_CHAR(), CAST(), CONVERT() 활용 (2) | 2025.03.21 |
---|---|
LEAD & LAG 함수 사용법: 이전/다음 행 참조하기 (2) | 2025.03.19 |
윈도우 함수(Window Function) 기초: RANK(), DENSE_RANK(), ROW_NUMBER() (2) | 2025.03.18 |
서브쿼리(Subquery) 활용법: EXISTS, IN, ANY, ALL (6) | 2025.03.17 |
JOIN 종류 정리: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN 비교 (0) | 2025.03.16 |