Fonctions de fenêtre standard
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,RANGEouGROUPS- définit les bornes d’un cadre, aggregate_function étant calculée dans ce cadre.ROWScompte les lignes physiques,RANGEcompte les valeursORDER BYetGROUPScompte les groupes de pairs (lignes égales selon la cléORDER BY).WINDOW- permet à plusieurs expressions d’utiliser la même définition de fenêtre.
Fonctions utilisables uniquement comme fonctions de fenêtre
lagInFrame, leadInFrame et nonNegativeDerivative sont des extensions de ClickHouse.
Exemples
Numérotation des lignes
Fonctions d’agrégation
Partitionnement par colonne
Délimitation de la fenêtre
Frame GROUPS
GROUPS compte des groupes de pairs entiers — des ensembles de lignes égales selon la clé ORDER BY — plutôt que des lignes physiques (ROWS) ou des valeurs ORDER BY (RANGE). N PRECEDING et N FOLLOWING comptent N groupes de pairs avant et après le groupe de pairs de la ligne en cours, et chaque groupe de pairs inclus apporte toujours l’ensemble de ses lignes.
La requête ci-dessous applique les mêmes limites 1 PRECEDING AND 1 FOLLOWING à des frames ROWS, RANGE et GROUPS. La colonne order contient des valeurs dupliquées et non consécutives ; les trois modes couvrent donc des lignes différentes :
ROWScompte les lignes physiques ; la frame comporte donc au plus trois lignes adjacentes : la ligne en cours et une ligne de chaque côté.RANGEcompte les valeurs d’order;1 PRECEDINGet1 FOLLOWINGcouvrent donc les lignes dont l’orderdiffère d’au plus 1 de celui de la ligne en cours. Avec des écarts de 10, aucune ligne voisine n’est incluse ; la frame ne contient donc que les lignes ayant le mêmeorderque la ligne en cours.GROUPScompte les groupes de pairs ;1 PRECEDINGet1 FOLLOWINGincluent donc toujours intégralement les groupes adjacents, quels que soient les écarts entre les valeurs d’order.
Exemples concrets
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)
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.