본문 바로가기
프로그래밍/SQL, Hive, SAS 관련 정보

[SQL 기초] CASE WHEN

by TrillionNT 2025. 1. 19.

2025.02.24 - [프로그래밍/SQL, Hive, SAS 관련 정보] - [SQL] Table of Contents


SQL에서 조건문을 사용하는 가장 기본적인 방식인 CASE WHEN에 대해서 알아보도록 하겠습니다. 기본적인 Syntax는 아래와 같습니다. (저는 가끔.. ELSE 다음에 then을 붙이는 실수, 그리고 END를 빼먹는 실수를 하곤 합니다..)

CASE 표현식
    WHEN 값1 THEN 결과1
    WHEN 값2 THEN 결과2
    ...
    ELSE 결과N
END

 

 

주의) 조건을 적용할 때, 만일 조건이 중복되면 어떻게 될까요? 조건이 하나라도 참이면, 그에 해당하는 값을 반환하고 이후 조건은 무시됩니다.

SELECT Name, Salary,
       CASE 
           WHEN Salary > 5000 THEN 'High'
           WHEN Salary > 3000 THEN 'Medium'
           ELSE 'Low'
       END AS Salary_Level
FROM Employees;

 

주의) 참고로 대부분의 SQL DBMS에서는 CASE WHEN을 주요 조건절 적용함수로 사용하고 IF는 MYSQL이 아닌 다른 DBMS에서는 특수한 기능을 합니다. 

 

한 번 예시를 볼까요? EMPLOYEE 테이블입니다. 

 

1) 집계함수와 같이 CASE WHEN 사용

예) 부서별로 "HIGH" 급여(6000 이상)를 받는 직원 수 계산

SELECT 
    DEPT_ID, 
    COUNT(CASE WHEN SALARY >= 6000 THEN 1 END) AS HIGH_SALARY_COUNT
FROM EMPLOYEE
GROUP BY DEPT_ID;

 

2) JOIN의 조건으로 CASE WHEN 사용

예) 급여 등급에 따라 상이한 테이블과 조인

SELECT 
    e.EMP_NAME, 
    e.SALARY, 
    CASE 
        WHEN e.SALARY >= 6000 THEN 'High'
        WHEN e.SALARY >= 4000 THEN 'Medium'
        ELSE 'Low'
    END AS SALARY_GRADE,
    b.BONUS_AMOUNT
FROM EMPLOYEE e
LEFT JOIN BONUS b
    ON CASE 
        WHEN e.SALARY >= 6000 THEN b.GRADE = 'High'
        WHEN e.SALARY >= 4000 THEN b.GRADE = 'Medium'
        ELSE b.GRADE = 'Low'
    END;