개발/SQL

CASE 문으로 데이터 변환: 동적 값 변환과 그룹핑

예니03 2025. 3. 20. 10:58
반응형

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 문을 직접 사용해보면서 익혀보세요! 🚀

반응형