Passer au contenu principal
Les fonctions de fenêtre vous permettent d’effectuer des calculs sur un ensemble de lignes liées à la ligne en cours. Elles peuvent être utilisées pour effectuer des calculs similaires à ceux réalisés avec des fonctions d’agrégation, mais s’en distinguent par le fait qu’une fonction de fenêtre ne regroupe pas les lignes en une seule sortie ; au contraire, les lignes individuelles sont toujours renvoyées.

Fonctions de fenêtre standard

ClickHouse prend en charge la syntaxe SQL standard pour les fenêtres et les fonctions de fenêtre. Le tableau ci-dessous indique les fonctionnalités actuellement prises en charge :

Syntaxe

  • PARTITION BY - définit comment découper un jeu de résultats en groupes.
  • ORDER BY - définit comment ordonner les lignes à l’intérieur du groupe pendant le calcul de aggregate_function.
  • ROWS or RANGE - définit les bornes d’un cadre, aggregate_function étant calculée dans ce cadre.
  • WINDOW - permet à plusieurs expressions d’utiliser la même définition de fenêtre.

Fonctions utilisables uniquement comme fonctions de fenêtre

Les fonctions suivantes ne peuvent être utilisées que comme fonctions de fenêtre. La plupart sont des fonctions SQL standard ; lagInFrame, leadInFrame et nonNegativeDerivative sont des extensions de ClickHouse.

Exemples

Voyons quelques exemples d’utilisation des fonctions de fenêtre.

Numérotation des lignes

Fonctions d’agrégation

Comparez le salaire de chaque joueur à la moyenne de son équipe.
Comparez le salaire de chaque joueur au salaire le plus élevé de son équipe.

Partitionnement par colonne

Délimitation de la fenêtre

Exemples concrets

Les exemples suivants permettent de résoudre des problèmes courants rencontrés en situation réelle.

Salaire maximal/total par service

Somme cumulée

Moyenne mobile / glissante (sur 3 lignes)

Moyenne mobile / glissante (par tranches de 10 secondes)

Moyenne mobile / glissante (sur 10 jours)

La température est stockée avec une précision à la seconde, mais en utilisant Range et ORDER BY toDate(ts), nous formons un frame de 10 unités, et comme toDate(ts) est utilisé, l’unité est le jour.

Références

Issues GitHub

La feuille de route concernant la prise en charge initiale des fonctions de fenêtre est décrite dans cette issue. Toutes les issues GitHub liées aux fonctions de fenêtre portent le label comp-window-functions.

Tests

Ces tests contiennent des exemples de la grammaire actuellement prise en charge : 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

Documentation de 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

Documentation de 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
Dernière modification le 25 juin 2026