728x90
반응형
📘 2-4. 조건 만족 누적합 (Cumulative SUM)
데이터 분석이나 실무 통계에서는 특정 조건을 만족하는 값의 누적합(Cumulative SUM)을 구해야 할 때가 많습니다.
예를 들어, 일자별 매출 누계, 유저 가입자 누적 수 등을 구할 때 사용됩니다.
📌 기본 개념: 윈도우 함수 (Window Function)
MySQL 8.0 이상에서는 OVER()
윈도우 함수를 이용해 누적합을 쉽게 계산할 수 있습니다.
SELECT
sale_date,
amount,
SUM(amount) OVER (ORDER BY sale_date) AS cumulative_sales
FROM sales;
📌 의미: 날짜 기준으로 amount
값을 누적해서 더한 컬럼을 생성합니다.
✅ 예제 1: 일자별 매출 누적합
SELECT
DATE(created_at) AS sale_day,
SUM(amount) AS daily_total,
SUM(SUM(amount)) OVER (ORDER BY DATE(created_at)) AS cumulative_total
FROM sales
GROUP BY sale_day
ORDER BY sale_day;
✅ 예제 2: 월별 신규 가입자 및 누적 가입자 수
SELECT
DATE_FORMAT(created_at, '%Y-%m') AS month,
COUNT(*) AS new_users,
SUM(COUNT(*)) OVER (ORDER BY DATE_FORMAT(created_at, '%Y-%m')) AS cumulative_users
FROM users
GROUP BY month
ORDER BY month;
✅ 예제 3: 특정 조건을 만족하는 누적 수치 (예: 유료 사용자)
SELECT
DATE(created_at) AS reg_day,
SUM(CASE WHEN paid = 1 THEN 1 ELSE 0 END) AS paid_users,
SUM(SUM(CASE WHEN paid = 1 THEN 1 ELSE 0 END)) OVER (ORDER BY DATE(created_at)) AS cumulative_paid_users
FROM users
GROUP BY reg_day
ORDER BY reg_day;
💡 실무 팁
- MySQL 8.0 이상에서만 윈도우 함수 사용 가능 (
OVER()
) - 조건부 누적합은
CASE WHEN
으로 필터링한 뒤SUM()
으로 감싸는 방식 - GROUP BY + SUM + OVER() 패턴은 시간대별 변화 추이를 파악할 때 핵심
📚 다음 글 예고
다음 포스팅에서는 2-5. RANK, ROW_NUMBER를 활용한 순위 처리 편으로 넘어갑니다.
👉 실무에서 순위 매기기, 최신 데이터 N건 추출 등에 유용한 윈도우 함수 활용법을 소개합니다.
728x90
반응형
'DB 데이터 > 실무 중심 쿼리 활용법' 카테고리의 다른 글
RANK, ROW_NUMBER를 활용한 순위 처리 (1) | 2025.05.10 |
---|---|
GROUP BY와 CASE WHEN을 활용한 조건부 집계 (0) | 2025.05.08 |
서브쿼리 vs JOIN 언제 어떻게 쓰나 (0) | 2025.05.07 |
조건부 COUNT와 SUM 쓰는 법 (1) | 2025.04.24 |