Перейти к основному содержанию
Оконные функции позволяют выполнять вычисления по набору строк, связанных с текущей строкой. Их можно использовать для вычислений, похожих на те, которые выполняются агрегатными функциями, но оконная функция не объединяет строки в один результирующий вывод — отдельные строки по-прежнему возвращаются.

Стандартные оконные функции

ClickHouse поддерживает стандартный SQL-синтаксис для окон и оконных функций. В таблице ниже показано, какие возможности поддерживаются в настоящее время:

Синтаксис

  • PARTITION BY - определяет, как разбить результирующий набор на группы.
  • ORDER BY - определяет порядок строк внутри группы при вычислении aggregate_function.
  • ROWS or RANGE - определяет границы рамки окна, в пределах которой вычисляется aggregate_function.
  • WINDOW - позволяет нескольким выражениям использовать одно и то же определение окна.

Функции, доступные только как оконные функции

Следующие функции можно использовать только как оконные функции. Большинство из них — стандартные функции SQL; lagInFrame, leadInFrame и nonNegativeDerivative — расширения ClickHouse.

Примеры

Рассмотрим несколько примеров использования оконных функций.

Нумерация строк

Функции агрегации

Сравните зарплату каждого игрока со средней зарплатой в его команде.
Сравните зарплату каждого игрока с максимальной зарплатой в его команде.

Партиционирование по столбцу

Границы рамки окна

Примеры из практики

Следующие примеры показывают, как решать распространённые практические задачи.

Максимальная/общая зарплата по отделам

Нарастающий итог

Скользящее среднее (по 3 строкам)

Скользящее среднее (за 10 секунд)

Скользящее среднее (за 10 дней)

Температура хранится с точностью до секунд, но с помощью Range и ORDER BY toDate(ts) мы формируем рамку окна размером 10 единиц, и благодаря toDate(ts) этой единицей является день.

Ссылки

GitHub Issues

План начальной поддержки оконных функций приведён в этом issue. Все GitHub issues, связанные с оконными функциями, помечены тегом 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
Последнее изменение 2 июля 2026 г.