본문 바로가기
핵심 기술 튜토리얼 (Core Tech Tutorials)

SQL CASE WHEN 사용법: 데이터 카테고리화 및 조건 부여 완벽 가이드

by 데이터비전 2025. 6. 15.

안녕하세요, 데이터로 비전을 찾는 '데이터비전 연구소'의 데이터비전입니다.

 

지난 포스팅 [데이터 분석의 꽃, GROUP BY와 HAVING 절 완벽 이해하기]를 통해, 우리는 데이터를 그룹으로 묶어 '부서별' 평균 연봉과 같은 한 차원 높은 분석을 할 수 있게 되었습니다.

 

하지만 실무에서는 이런 요구사항을 더 자주 마주하게 됩니다.

 

"알겠습니다. 그럼 연봉 8000 이상은 '고연봉자', 7000 이상은 '중연봉자', 그 외는 '일반' 이라고 카테고리를 만들어서, 각 그룹별로 몇 명이나 있는지 보여주세요."

 

생각만 해도 머리가 아파옵니다. 기존 데이터에는 '연봉 등급'이라는 컬럼이 없기 때문이죠. 지금까지 배운 것만으로는 이 문제를 해결할 수 없습니다. 엑셀이라면 IF 함수를 써서 해결했을 텐데... SQL에는 없을까요?

 

당연히 있습니다! 오늘 우리는 엑셀의 IF 함수보다 훨씬 강력하고 유연한, SQL의 조건문 CASE WHEN에 대해 배울 겁니다. 이 기술을 익히면 여러분은 기존 데이터를 입맛에 맞게 '재창조'하는 능력을 갖게 됩니다. 데이터 전처리와 분석의 효율을 극적으로 높여주는 비법이니, 절대 놓치지 마세요!

 

SQL CASE WHEN 사용법: 데이터 카테고리화 및 조건 부여


1. 데이터를 변신시키는 마법, CASE WHEN

CASE WHEN 구문은 특정 조건에 따라 값을 다르게 반환해주는, 한마디로 '조건에 따른 변신기'입니다. 기본 구조는 이렇습니다.

 

CASE
    WHEN 조건1 THEN '결과1'
    WHEN 조건2 THEN '결과2'
    ELSE '그 외 결과'
END

 

백문이 불여일견, 앞서 제기된 '연봉 등급' 문제를 바로 해결해 보겠습니다.

SELECT
    name,
    salary,
    CASE
        WHEN salary >= 8000 THEN '고연봉자'
        WHEN salary >= 7000 THEN '중연봉자'
        ELSE '일반'
    END AS '연봉 등급'
FROM employees;

 

결과를 보세요! 기존에 없던 '연봉 등급'이라는 새로운 컬럼이 마법처럼 생겨났고, 각 직원의 연봉에 따라 알맞은 등급이 부여된 것을 확인할 수 있습니다. `CASE`는 위에서부터 순서대로 조건을 확인하며, 가장 먼저 참(True)이 되는 조건의 결과를 반환하고 즉시 종료됩니다.

 

❗ Tip: ELSE를 빼먹으면 어떻게 될까?
ELSE 부분은 필수가 아니지만, 만약 생략하면 어떤 조건에도 해당하지 않는 값들은 `NULL` (빈 값)로 처리됩니다. 데이터 분석 시 `NULL` 값은 오류의 원인이 될 수 있으니, 특별한 경우가 아니라면 `ELSE`를 사용해 모든 경우를 처리해주는 습관을 들이는 것이 좋습니다.


2. 분석의 꽃 GROUP BY와 CASE WHEN의 환상적인 조합

CASE WHEN의 진짜 힘은 다른 구문과 결합했을 때 나타납니다. 특히, 지난 시간에 배운 GROUP BY와 함께 사용하면 분석의 수준이 완전히 달라집니다.

 

이제 우리는 '연봉 등급별 직원 수'를 단 한 번의 쿼리로 계산할 수 있습니다.

 

SELECT
    CASE
        WHEN salary >= 8000 THEN '고연봉자'
        WHEN salary >= 7000 THEN '중연봉자'
        ELSE '일반'
    END AS '연봉 등급',
    COUNT(*) AS '직원 수'
FROM employees
GROUP BY
    CASE
        WHEN salary >= 8000 THEN '고연봉자'
        WHEN salary >= 7000 THEN '중연봉자'
        ELSE '일반'
    END;

 

어떤가요? CASE WHEN으로 새로운 분석 기준('연봉 등급')을 만들고, 그 기준으로 데이터를 그룹지어(GROUP BY) 통계를 낸 것입니다. 이 원리만 이해하면 '20대는 청년, 40대는 중년으로 묶어서 연령대별 통계내기', '구매 횟수 10회 이상은 VIP, 5회 이상은 우수고객으로 나눠서 그룹별 특징 분석하기' 등 무궁무진한 분석이 가능해집니다.


마무리하며: 이제 당신은 데이터를 재창조할 수 있습니다

오늘은 실무 활용도 200%의 강력한 무기, CASE WHEN 구문을 함께했습니다. 이제 여러분은 단순히 있는 데이터를 조회하는 것을 넘어, 분석 목적에 맞게 데이터를 가공하고 새로운 의미를 부여하는, 즉 데이터를 '재창조'하는 능력을 갖게 되었습니다. 축하합니다!

 

지금까지 우리는 `employees`라는 단 하나의 테이블 안에서 데이터를 지지고 볶으며 분석 스킬을 연마해왔습니다.

 

그런데 여기서 실무의 가장 큰 장벽이 등장합니다.

 

"직원 정보는 `employees` 테이블에 있는데, 각 직원이 어떤 프로젝트에 참여했는지는 `projects`라는 다른 테이블에 있다면 어떻게 하죠? 두 테이블을 합쳐서 '개발팀 직원이 참여한 프로젝트 목록'을 보려면 어떻게 해야 하나요?"

 

다음 포스팅에서는 이처럼 여러 테이블에 흩어져 있는 데이터를 하나로 합쳐주는, 관계형 데이터베이스의 핵심이자 SQL 면접 단골 질문인 JOIN에 대해 본격적으로 알아보겠습니다. 드디어 데이터 분석이 더욱 현실 세계와 가까워지는 순간이니, 절대 놓치지 마세요!

 

오늘 배운 CASE WHEN, 실무에서 어떻게 활용해볼 수 있을까요? 궁금한 점이나 좋은 아이디어가 있다면 댓글로 남겨주세요!