susinlee 님의 블로그
PostgreSQL Window Functions 본문
윈도우 함수는 데이터의 행들을 그룹화하지 않고, 각 행에 대해 특정 연산을 수행하는 함수
집계함수와 달리 전체 데이터를 하나의 값으로 축약하지 않고, 각 행별로 연산된 값을 출력할 수 있음
-- 기본 문법
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 |