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를 사용하자!
반응형