Skip to main content
윈도우 함수를 사용하면 현재 행과 관련된 행 집합 전체에 걸쳐 계산을 수행할 수 있습니다. 집계 함수로 수행하는 계산과 비슷한 계산을 수행하는 데 사용할 수 있지만, 윈도우 함수는 행을 하나의 출력으로 그룹화하지 않으므로 개별 행이 그대로 반환됩니다.

표준 윈도우 함수

ClickHouse는 윈도우 및 윈도 함수에 대한 표준 SQL 문법을 지원합니다. 아래 표는 현재 지원되는 기능을 보여줍니다:

구문

  • PARTITION BY - 결과 집합을 어떻게 그룹으로 나눌지 정의합니다.
  • ORDER BY - aggregate_function을 계산할 때 그룹 내 행의 순서를 정의합니다.
  • ROWS, RANGE 또는 GROUPS - 프레임의 경계를 정의하며, aggregate_function은 프레임 내에서 계산됩니다. ROWS는 물리적 행을 세고, RANGEORDER BY 값을 세며, GROUPS는 피어 그룹(ORDER BY 키 값이 같은 행)을 셉니다.
  • WINDOW - 여러 표현식에서 동일한 윈도우 정의를 사용할 수 있도록 합니다.

윈도우 함수로만 사용할 수 있는 함수

다음 함수는 윈도우 함수로만 사용할 수 있습니다. 대부분은 표준 SQL 함수이며, lagInFrame, leadInFrame, nonNegativeDerivative는 ClickHouse 확장 기능입니다.

예시

윈도 함수를 사용하는 몇 가지 예시를 살펴보겠습니다.

행 번호 지정

집계 함수

각 선수의 급여를 소속 팀의 평균 급여와 비교합니다.
각 선수의 급여를 소속 팀의 최고 급여와 비교합니다.

컬럼별 파티셔닝

프레임 경계 지정

GROUPS 프레임

GROUPS 프레임은 물리적 행(ROWS)이나 ORDER BY 값(RANGE)이 아니라 ORDER BY 키가 같은 행들로 이루어진 전체 피어 그룹을 기준으로 계산합니다. N PRECEDINGN FOLLOWING은 현재 행이 속한 피어 그룹의 앞뒤에 있는 N개의 피어 그룹을 세며, 포함되는 피어 그룹은 항상 해당 그룹의 모든 행을 포함합니다. 아래 쿼리는 ROWS, RANGE, GROUPS 프레임에 동일한 1 PRECEDING AND 1 FOLLOWING 범위를 적용합니다. order 컬럼에는 중복되거나 연속되지 않는 값이 있으므로 세 모드에서 포함되는 행이 서로 다릅니다:
각 모드는 경계를 서로 다르게 해석합니다:
  • ROWS는 물리적 행을 기준으로 계산하므로 프레임에는 현재 행과 양쪽의 행 1개씩, 최대 3개의 연속된 행이 포함됩니다.
  • RANGEorder 값을 기준으로 계산하므로 1 PRECEDING1 FOLLOWINGorder 값이 현재 행의 order 값에서 1 이내인 행을 포함합니다. 간격이 10이면 인접 행은 조건을 충족하지 않으므로 프레임에는 현재 order 값을 공유하는 행만 포함됩니다.
  • GROUPS는 피어 그룹을 기준으로 계산하므로 1 PRECEDING1 FOLLOWINGorder 값 간의 간격과 관계없이 항상 인접 그룹 전체를 포함합니다.

실제 사용 예시

다음 예시는 실제 환경에서 자주 접하는 문제를 해결하는 방법을 보여줍니다.

부서별 최대/총 급여

누적합

이동 평균 / 슬라이딩 평균(3행 기준)

이동 평균 / 슬라이딩 평균(10초 기준)

이동 평균 / 슬라이딩 평균(10일 단위)

온도는 초 단위 정밀도로 저장되지만, RangeORDER BY toDate(ts)를 사용하면 크기가 10인 프레임(frame)이 형성되고, toDate(ts)를 사용하므로 단위는 일입니다.

참고

GitHub 이슈

윈도우 함수의 초기 지원 로드맵은 이 이슈에 정리되어 있습니다. 윈도우 함수와 관련된 모든 GitHub 이슈에는 comp-window-functions 레이블이 지정되어 있습니다.

테스트

다음 테스트에는 현재 지원되는 문법의 예시가 포함되어 있습니다. https://github.com/ClickHouse/ClickHouse/blob/master/tests/performance/window_functions.xml https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/01591_window_functions.sql

Postgres 문서

https://www.postgresql.org/docs/current/sql-select.html#SQL-WINDOW https://www.postgresql.org/docs/devel/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS https://www.postgresql.org/docs/devel/functions-window.html https://www.postgresql.org/docs/devel/tutorial-window.html

MySQL 문서

https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html https://dev.mysql.com/doc/refman/8.0/en/window-functions-frames.html
마지막 수정일 2026년 8월 14일