컴퓨터 과학/데이터 베이스

MySQL CASE문으로 조건 분기하기

Data Jun 2025. 8. 17. 20:58

SQL에서는 데이터를 조회할 때 단순히 값을 가져오는 것뿐 아니라, 조건에 따라 다른 결과를 보여주고 싶을 때가 많습니다.
이럴 때 사용하는 것이 바로 CASE문입니다.

 

CASE문 기본 구조

CASE 
    WHEN 조건1 THEN 결과1
    WHEN 조건2 THEN 결과2
    ELSE 결과3
END

 

  • WHEN: 조건식
  • THEN: 조건이 참일 때 반환할 값
  • ELSE: 위 조건들에 해당하지 않을 때 반환할 값 (생략 가능)

 

예제 쿼리

아래는 회원 테이블에서 키와 몸무게를 합쳐 보여주고, BMI 지수를 계산한 뒤, 그 값에 따라 비만 여부를 분류하는 SQL입니다.

SELECT 
    email, 
    CONCAT(height, 'cm', ', ', weight, 'kg') AS '키와 몸무게',
    weight / ((height/100) * (height/100)) AS BMI,

    CASE 
        WHEN weight IS NULL OR height IS NULL THEN '비만 여부 알 수 없음'
        WHEN weight / ((height/100) * (height/100)) >= 25 THEN '과체중 또는 비만'
        WHEN weight / ((height/100) * (height/100)) >= 18.5
             AND weight / ((height/100) * (height/100)) < 25
             THEN '정상'
        ELSE '저체중'
    END AS 'C_BMI'
FROM copang_main.member;

 

실행 결과 해석

  1. 키와 몸무게 → CONCAT() 함수를 사용해 "170cm, 65kg" 형태로 보기 좋게 표시.
  2. BMI → weight ÷ (height/100)² 공식으로 계산.
  3. C_BMI (CASE문 결과):
    • 키 또는 몸무게가 NULL이면 "비만 여부 알 수 없음"
    • BMI ≥ 25 → "과체중 또는 비만"
    • 18.5 ≤ BMI < 25 → "정상"
    • 그 외 → "저체중"

정리

  • CASE문은 SQL에서 조건 분기를 할 수 있는 강력한 도구.
  • WHEN ~ THEN ~ 구문을 통해 조건별로 다른 값을 반환 가능.
  • 실무에서는 데이터 그룹화, 카테고리 분류, 사용자 친화적 출력 등에 자주 활용됨.

이번 예제처럼 BMI 계산 결과를 CASE문으로 구간별 분류하면, 데이터를 훨씬 직관적으로 분석할 수 있습니다.