PostgreSQL집계와 분석

윈도 함수 기본

행을 합쳐 하나로 줄이지 않으면서 순위나 누적값을 계산하는 PostgreSQL 윈도 함수의 핵심 패턴을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

text
SELECT
  user_id,
  created_at,
  ROW_NUMBER() OVER (
    PARTITION BY user_id
    ORDER BY created_at DESC
  ) AS rn
FROM posts;

설명

  • 윈도 함수는 GROUP BY처럼 행을 하나로 줄이지 않고, 각 행을 유지한 채 계산 결과를 덧붙입니다.
  • OVER (...) 안에는 어떤 범위를 기준으로 계산할지 적습니다.
  • PARTITION BY는 그룹을 나누고, ORDER BY는 그 안에서 순서 기준을 정합니다.
  • ROW_NUMBER, RANK, SUM, AVG 등을 윈도 함수 형태로 쓰면 "사용자별 최신 글", "부서별 급여 순위", "날짜별 누적 합계" 같은 분석 쿼리를 표현하기 좋습니다.
  • 집계와 비슷해 보이지만, 결과 행을 유지한다는 점이 핵심 차이입니다.

짧은 예제

text
SELECT
  user_id,
  amount,
  SUM(amount) OVER (
    PARTITION BY user_id
    ORDER BY created_at
  ) AS running_total
FROM payments;

빠른 정리

요소의미
윈도 함수각 행을 유지한 채 계산
OVER (...)계산 범위 지정
PARTITION BY그룹 나누기
ORDER BY그룹 안 순서 지정

주의할 점

윈도 함수는 집계와 달리 원본 행 수를 줄이지 않습니다. "사용자당 한 줄만 필요하다"면 윈도 함수 결과를 바깥 쿼리에서 한 번 더 걸러야 할 때가 많습니다.

참고 링크

2 sources