susinlee 님의 블로그

PostgreSQL Window Functions 본문

학습/TIL

PostgreSQL Window Functions

susinlee 2025. 3. 7. 18:39

윈도우 함수는 데이터의 행들을 그룹화하지 않고, 각 행에 대해 특정 연산을 수행하는 함수

집계함수와 달리 전체 데이터를 하나의 값으로 축약하지 않고, 각 행별로 연산된 값을 출력할 수 있음

 

-- 기본 문법
SELECT
    컬럼명,
    윈도우_함수() OVER (
    	PARTITION BY 컬럼명 -- 그룹화 기준 (생략 가능)
        ORDER BY 컬럼명 -- 정렬 기준 (생략 가능)
        ROWS BETWEEN ... -- 범위 지정 (선택 사항)
    ) AS 결과_컬럼명
FROM 테이블명;

 

1. OVER()

  • 윈도우 함수를 사용할 때 반드시 필요
  • PARTITION BY, ORDER BY, ROWS BETWEEN 같은 추가 옵션을 설정 가능

2. PARTITION BY (선택 사항)

  • 특정 기준으로 데이터를 그룹화
  • 예: PARTITION BY 윈도우 함수는 데이터의 행들을 그룹화하지 않고, 각 행에 대해 특정 연산을 수행하는 함수

3. ORDER BY (선택 사항)

  • 데이터를 정렬한 후 윈도우 함수 적용
  • 예: ORDER BY tweet_date → 날짜 순서대로 정렬 후 연산

4. ROW BETWEEN (선택 사항)

  • 윈도우 함수가 적용될 범위를 지정
  • 예: ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
    • 현재 행을 포함해 이전 2개의 행까지 고려

5. 참고 사항

  • 순위 함수(ROW_NUMBER, RANK, DENSE_RANK)는 정렬된 데이터를 기준으로 순위를 매김
  • 이전/다음 행 참조는 LAG, LEAD 사용
  • 이동 평균 계산은 AVG + ROW BETWEEN을 사용하면 가능 

ROWS BETWEEN 상세 설명

PostgreSQL 윈도우 함수에서 특정 행의 범위를 지정할 때 사용

기본적으로 ORDER BY와 함께 사용되며, 어떤 범위의 행을 포함할지 결정하는 역할을 함

윈도우_함수() OVER (
    PARTITION BY 컬럼명
    ORDER BY 컬럼명
    ROWS BETWEEN 시작점 AND 끝점
)
  • 시작점과 끝점을 설정하여 어떤 행까지 포함할지 지정
  • 범위를 지정하지 않으면 기본적으로 현재 행만 포함됨

ROWS BETWEEN 옵션 종류

옵션 의미
UNBOUNDED PRECEDING AND CURRENT ROW 현재 행을 포함하여 처음부터 현재 행까지 모든 행 사용
2 PRECEDING AND CURRENT ROW 현재 행 + 이전 2개 행 포함
CURRENT ROW AND UNBOUNDED FOLLOWING 현재 행부터 마지막 행까지 포함
1 PRECEDING AND 1 FOLLOWING 현재 행 + 이전 1개 행 + 이후 1개 행 포함
UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING 전체 행 포함

 

'학습 > TIL' 카테고리의 다른 글

퍼널, 리텐션, 코호트 분석 - 1  (0) 2025.03.09
3/9 오늘 할 거  (0) 2025.03.09
slack 알림 봇 설정하기  (0) 2025.03.04
Pandas last() vs tail(1)  (0) 2025.03.04
태블로 실시간 업데이트 및 cron 자동화 구현  (0) 2025.03.03