MySQL

MySQL - CASE WHEN 에 대해서

Matae0712 2025. 5. 22. 10:18
반응형
SELECT customer_name, order_total, 
CASE WHEN order_total >= 100000 THEN 'VIP' 
WHEN order_total >= 50000 THEN 'Regular' 
ELSE 'Basic' END AS customer_grade 
FROM orders;

1. CASE WHEN의 기본 구조

SQL은 선언형 언어지만, 조건 분기(if)가 필요한 경우가 많습니다. 이럴 때 CASE WHEN은 강력한 도구가 됩니다.

 
 

결과 예시:

customer_nameorder_totalcustomer_grade
김철수 120000 VIP
이영희 78000 Regular
박민수 34000 Basic
 

2. CASE 구문 문법 요약

 
CASE WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 ... ELSE 결과N END
  • 조건식이 TRUE인 경우 해당 결과 반환
  • 위에서부터 순차 평가: 첫 번째로 TRUE가 되는 조건이 실행됨
  • 모든 조건이 FALSE면 ELSE 실행

3. 실전 예제: 요일별 할인율 계산

SELECT DAYNAME(order_date) AS day_of_week, 
order_id, 
order_total, 
CASE DAYOFWEEK(order_date) WHEN 1 THEN 0.10 -- 일요일 
WHEN 7 THEN 0.05 -- 토요일 
ELSE 0.00 -- 평일 
END AS discount_rate 
FROM orders;
 

WHEN 1 THEN ... 은 WHEN DAYOFWEEK(order_date) = 1 을 의미합니다.


4. 조건부 집계에도 활용 가능

SELECT COUNT(*) AS total_orders, 
COUNT(CASE WHEN order_total >= 100000 THEN 1 END) AS vip_orders, 
COUNT(CASE WHEN order_total < 50000 THEN 1 END) AS low_orders 
FROM orders;
  • 집계 함수(COUNT, SUM, AVG 등) 안에 CASE를 쓰면 조건부 집계 가능

5. 업데이트 시에도 활용 가능

UPDATE orders 
SET delivery_fee = CASE WHEN order_total >= 100000 THEN 0 
WHEN order_total >= 50000 
THEN 2500 ELSE 5000 END
WHERE delivery_type = 'NORMAL';
 
  • 조건별로 다르게 값을 설정하는 데 유용

 

6. 오늘의 팁 요약

  • CASE WHEN은 SQL에서 if-else 로직을 구현하는 강력한 도구입니다.
  • SELECT, UPDATE, ORDER BY, 집계함수 등 거의 모든 곳에서 사용 가능
  • 가독성 좋고, 유지보수에 유리한 구조로 작성할 수 있습니다.
  • 복잡한 조건 분기를 처리할 땐 CASE를 사용하자!
반응형