
sales 테이블
sale_id | sale_date | category | amount
--------|-------------|----------|--------
1 | 2024-01-05 | 음식 | 10000
2 | 2024-01-10 | 패션 | 25000
3 | 2024-01-15 | 음식 | 15000
4 | 2024-02-05 | 음식 | 20000
5 | 2024-02-10 | 패션 | 30000
6 | 2024-02-20 | 전자 | 50000
SELECT
DATE_FORMAT(sale_date, '%Y-%m') AS sale_month,
SUM(CASE WHEN category = '음식' THEN amount ELSE 0 END) AS 음식,
SUM(CASE WHEN category = '패션' THEN amount ELSE 0 END) AS 패션,
SUM(CASE WHEN category = '전자' THEN amount ELSE 0 END) AS 전자
FROM sales
GROUP BY sale_month
ORDER BY sale_month;
sale_month | 음식 | 패션 | 전자
-----------|-------|-------|-------
2024-01 | 25000 | 25000 | 0
2024-02 | 20000 | 30000 | 50000
SUM(CASE WHEN 조건 THEN 값 ELSE 0 END) AS 컬럼명
CASE WHEN이 하는 일:
sale_id | category | amount | CASE WHEN category='음식' THEN amount ELSE 0
--------|----------|--------|---------------------------------------------
1 | 음식 | 10000 | 10000 ← 조건 맞음!
2 | 패션 | 25000 | 0 ← 조건 안 맞음
3 | 음식 | 15000 | 15000 ← 조건 맞음!
SUM으로 합치면:
sale_month | category | total
-----------|----------|-------
2024-01 | 음식 | 25000
2024-01 | 패션 | 25000
2024-02 | 음식 | 20000
2024-02 | 패션 | 30000
2024-02 | 전자 | 50000
sale_month | 음식 | 패션 | 전자
-----------|-------|-------|-------
2024-01 | 25000 | 25000 | 0
2024-02 | 20000 | 30000 | 50000
-- ❌ SELECT 안에 SELECT 이렇게 안 됨
SELECT
SELECT SUM(amount) FROM sales WHERE category = '음식' AS 음식
FROM sales
-- ✅ CASE WHEN 써야 함
SELECT
SUM(CASE WHEN category = '음식' THEN amount ELSE 0 END) AS 음식
FROM sales
COUNT(CASE WHEN category = '음식' THEN 1 END) AS 음식_건수
AVG(CASE WHEN category = '음식' THEN amount END) AS 음식_평균
-- ELSE 0 대신 ELSE NULL → 집계에서 제외됨
SUM(CASE WHEN category = '음식' THEN amount ELSE NULL END)
채널톡 DA 인턴 코테 준비 중 정리한 내용입니다 🚀
