전체 용어 목록

윈도 함수

PostgreSQL의 윈도 함수란 무엇인가요?

윈도 함수는 순위나 누적 합계처럼 관련된 행 집합에 걸쳐 값을 계산하지만, GROUP BY처럼 그 행들을 하나로 합치지는 않습니다.

윈도 함수는 OVER 절로 정의되는, 현재 행과 관련된 행 집합에 걸쳐 계산을 수행합니다. GROUP BY를 사용한 집계와 달리 모든 입력 행이 출력에 그대로 남고 각 행이 자체 결과를 갖습니다.

PARTITION BY는 행을 그룹으로 나누고, ORDER BY는 각 그룹 내부의 순서를 정합니다. 내장 윈도 함수에는 row_number, rank, dense_rank, lag, lead, first_value 등이 있으며, sum이나 avg 같은 일반 집계 함수도 OVER와 함께 사용할 수 있습니다. 윈도 함수는 쿼리의 SELECT 목록과 ORDER BY 절에서만 사용할 수 있습니다.

예제

이 예제는 팀 내에서 선수의 순위를 매기고, 모든 행 옆에 팀의 총점을 표시합니다.

CREATE TABLE scores (player text, team text, points int);
INSERT INTO scores VALUES
  ('ana', 'red', 30), ('ben', 'red', 25), ('cy', 'blue', 40), ('dee', 'blue', 35);

SELECT player, team, points,
       rank() OVER (PARTITION BY team ORDER BY points DESC) AS team_rank,
       sum(points) OVER (PARTITION BY team) AS team_total
FROM scores
ORDER BY team, team_rank;

확장 없이 기본 PostgreSQL 16 또는 17에서 실행되는 일반 SQL입니다. 버려도 되는 빈 데이터베이스에서 실행하세요.

출처

PostgreSQL 공식 문서(영문)입니다.

관련 용어