728x90
반응형
📘 2-1. 조건부 COUNT와 SUM 쓰는 법
MySQL에서 조건을 기준으로 집계를 할 때는 CASE WHEN
또는 IF
문을 COUNT
나 SUM
함수 안에 사용하는 방식이 자주 활용됩니다.
이 포스팅에서는 실무 예제를 통해 조건부 집계 쿼리를 정리합니다.
📌 기본 개념: 조건부 COUNT & SUM
SELECT
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count,
SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_sum
FROM users;
→ status
가 'active'인 사용자 수를 세고,
gender
가 'M'인 사용자 수를 합산합니다.
COUNT
는 NULL을 제외하고 세기 때문에 WHEN 조건을 만족하지 않으면 NULL이 되게 작성합니다.
✅ IF 문을 사용하는 방식도 가능
SELECT
SUM(IF(status = 'active', 1, 0)) AS active_sum
FROM users;
→ 조건이 맞을 경우 1, 아니면 0을 더해서 전체 합계를 구합니다.
🛠 실무 예제 모음
✅ 1. 상태값별 주문 수
SELECT
COUNT(*) AS total_orders,
COUNT(CASE WHEN status = 'paid' THEN 1 END) AS paid_orders,
COUNT(CASE WHEN status = 'cancelled' THEN 1 END) AS cancelled_orders
FROM orders;
✅ 2. 카테고리별 남성/여성 구매자 수
SELECT
category_id,
SUM(IF(gender = 'M', 1, 0)) AS male_count,
SUM(IF(gender = 'F', 1, 0)) AS female_count
FROM purchases
GROUP BY category_id;
✅ 3. 월별 활성 회원 수 (login_at 기준)
SELECT
DATE_FORMAT(login_at, '%Y-%m') AS month,
COUNT(DISTINCT user_id) AS active_users
FROM user_logins
WHERE login_at >= DATE_SUB(NOW(), INTERVAL 6 MONTH)
GROUP BY month
ORDER BY month DESC;
✅ 4. 상품별 리뷰 평점 분포 (1~5점)
SELECT
product_id,
COUNT(*) AS total_reviews,
SUM(IF(score = 5, 1, 0)) AS score_5,
SUM(IF(score = 4, 1, 0)) AS score_4,
SUM(IF(score = 3, 1, 0)) AS score_3,
SUM(IF(score = 2, 1, 0)) AS score_2,
SUM(IF(score = 1, 1, 0)) AS score_1
FROM reviews
GROUP BY product_id;
✅ 5. 유저 등급별 결제 여부에 따른 통계
SELECT
grade,
COUNT(*) AS total_users,
SUM(IF(paid = 1, 1, 0)) AS paid_users,
SUM(IF(paid = 0, 1, 0)) AS unpaid_users
FROM users
GROUP BY grade;
💡 CASE WHEN vs IF 차이
- CASE WHEN: SQL 표준 문법, 복잡한 조건 표현 가능
- IF: MySQL 전용 문법, 간단한 조건 처리에 유리
→ 실무에서는 단순 조건일 경우 IF
, 복수 조건/여러 분기일 경우 CASE WHEN
을 사용합니다.
📚 다음 글 예고
다음 포스팅에서는 서브쿼리 vs JOIN의 차이와 활용 상황을 비교하는
👉 2-2. 서브쿼리 vs JOIN 언제 어떻게 쓰나 편으로 넘어갑니다.
728x90
반응형
'DB 데이터 > 실무 중심 쿼리 활용법' 카테고리의 다른 글
RANK, ROW_NUMBER를 활용한 순위 처리 (1) | 2025.05.10 |
---|---|
조건 만족 누적합 (Cumulative SUM) (0) | 2025.05.09 |
GROUP BY와 CASE WHEN을 활용한 조건부 집계 (0) | 2025.05.08 |
서브쿼리 vs JOIN 언제 어떻게 쓰나 (0) | 2025.05.07 |