
MySQL 8.0부터 지원된 강력한 기능! 예전에는
GROUP BY를 주로 활용했지만, 이제는윈도우 함수를 통해 더 세밀하고 다양한 방식으로 데이터를 분석할 수 있습니다.
정의: “그룹화 없이도 각 행에 대해 집계 연산을 수행할 수 있는 함수.”
작동 방식:
주요 활용: 순위 매기기, 누적 합, 이동 평균, 전∙후 행 비교 등.
SELECT
order_id,
customer_id,
order_total,
SUM(order_total) -- 누적 매출
OVER (PARTITION BY customer_id
ORDER BY order_date) AS running_total
FROM orders;
* 나중에 다시 보니 여기서는 그냥 이런게 있구나 하고만 넘어갑시다!
| 포인트 | 윈도우 함수 | GROUP BY |
|---|---|---|
| 행 유지 여부 | 원본 행 유지 | 그룹당 1행으로 축소 |
| 집계 + 상세 정보 | 가능 | 불가능 (상세 정보 손실) |
| 연산 종류 | 순위, 누적, 이동 등 다양 | 합계, 평균 등 단순 집계 중심 |
| 연산 범위 | PARTITION 으로 세분화 가능 | 그룹 단위로만 처리 |
| MySQL 버전 | 8.0 이상 | 전 버전에서 사용 가능 |
SELECT
MONTH(order_date) AS month,
order_id,
order_total,
RANK() OVER (PARTITION BY MONTH(order_date)
ORDER BY order_total DESC) AS monthly_rank
FROM orders;
| month | order_id | order_total | monthly_rank |
|---|---|---|---|
| 1 | 20250104 | 9,000 | 1 |
| 1 | 20250115 | 8,500 | 2 |
GROUP BY 없이도 각 주문에 대한 순위 정보 제공 가능.
참고: 복잡한 윈도우 정의 시 성능 이슈가 발생할 수 있으니 인덱스를 적절히 활용하세요.
다음 포스팅부터는 어떤 윈도우 함수들이 있는지 알아봅시다! 👋