SQL Window Functions: 윈도우 함수란?

하하호호훈이·2025년 6월 2일

SQL(MySQL) MUST KNOW

목록 보기
21/23
post-thumbnail

윈도우 함수 (Window Functions) 완전정복!

MySQL 8.0부터 지원된 강력한 기능! 예전에는 GROUP BY를 주로 활용했지만, 이제는 윈도우 함수를 통해 더 세밀하고 다양한 방식으로 데이터를 분석할 수 있습니다.


1. 윈도우 함수란?

  • 정의: “그룹화 없이도 각 행에 대해 집계 연산을 수행할 수 있는 함수.”

  • 작동 방식:

    • 전체 테이블이 아닌, ‘윈도우(부분 집합)’ 내에서 연산을 수행합니다.
    • 계산된 결과는 새로운 컬럼처럼 각 행에 표시되며, 원본 데이터 구조는 유지됩니다.
  • 주요 활용: 순위 매기기, 누적 합, 이동 평균, 전∙후 행 비교 등.


2. 기본 문법 맛보기

SELECT
  order_id,
  customer_id,
  order_total,
  SUM(order_total)              -- 누적 매출
    OVER (PARTITION BY customer_id
          ORDER BY order_date)  AS running_total
FROM orders;
  • PARTITION BY: 고객별로 데이터를 분할합니다.
  • ORDER BY: 지정한 순서로 정렬하여 계산합니다.
  • OVER(): 윈도우 함수 범위를 정의합니다.

* 나중에 다시 보니 여기서는 그냥 이런게 있구나 하고만 넘어갑시다!


3. 윈도우 함수 vs. GROUP BY

포인트윈도우 함수GROUP BY
행 유지 여부원본 행 유지그룹당 1행으로 축소
집계 + 상세 정보가능불가능 (상세 정보 손실)
연산 종류순위, 누적, 이동 등 다양합계, 평균 등 단순 집계 중심
연산 범위PARTITION 으로 세분화 가능그룹 단위로만 처리
MySQL 버전8.0 이상전 버전에서 사용 가능

4. 실전 예제: 월별 매출 순위

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;

결과

monthorder_idorder_totalmonthly_rank
1202501049,0001
1202501158,5002

GROUP BY 없이도 각 주문에 대한 순위 정보 제공 가능.


6. 윈도우 함수가 유용한 경우

  1. 순위표 작성: “TOP 3 게시글”, “부서 내 급여 순위”
  2. 누적 분석: “연초부터 누적 매출(YTD)”
  3. 비교 분석: “전월 대비 증감”, “전날 대비 가격 변화”
  4. 이동 평균: “일일 방문자 수의 7일 이동 평균”

참고: 복잡한 윈도우 정의 시 성능 이슈가 발생할 수 있으니 인덱스를 적절히 활용하세요.


7. 정리

  • 윈도우 함수: 데이터를 요약하지 않고 원본 구조를 유지하면서 다양한 통계 계산 가능
  • GROUP BY: 데이터를 요약해서 간단한 집계를 보고자 할 때 유용
  • 필요에 따라 두 기능을 혼합 사용하면 분석의 폭이 넓어집니다

다음 포스팅부터는 어떤 윈도우 함수들이 있는지 알아봅시다! 👋

profile
AI, Data Science/Analysis 리뷰용가리지용 😆

0개의 댓글