Les fonctions de fenĂȘtrage fournissent des moyens pour rĂ©aliser des calculs sur des ensembles de lignes relatives Ă la ligne actuelle de la requĂȘte. Voir Section 3.5 pour une introduction Ă cette fonctionnalitĂ©, et Section 4.2.8 pour les dĂ©tails sur la syntaxe.
Les fonctions de fenĂȘtrage natives sont montrĂ©es dans Tableau 9.67. Notez que ces fonctions
doivent ĂȘtre appelĂ©es en utilisant la syntaxe des
fonctions de fĂ©nĂȘtrage, c'est-Ă -dire en utilisant une clause
OVER
.
En plus de ces fonctions, toute fonction d'agrégat standard native ou
dĂ©finie par un utilisateur (donc pas les agrĂ©gats Ă ensemble ordonnĂ© ou Ă
ensemble hypothĂ©tique) peut ĂȘtre utilisĂ©e comme une fonction de
fenĂȘtrage ; voir Section 9.21 pour une liste
des agrégats natifs. Les fonctions d'agrégat agissent comme des fonctions
de fenĂȘtrage quand une clause OVER
est utilisée pour
l'appel ; sinon elles agissent comme des agrégats standards et
renvoient une seule ligne pour un ensemble complet.
Tableau 9.67. Fonctions de fenĂȘtrage Ă usage gĂ©nĂ©ral
Toutes les fonctions listées dans Tableau 9.67
dépendent de l'ordre de tri indiqué par la clause ORDER
BY
sur la dĂ©finition de la fenĂȘtre associĂ©e. Les lignes qui ne
sont pas distinctes lors de la seule considération des colonnes
ORDER BY
sont des peers. Les
quatre fonctions de rang (y compris cume_dist
) sont
dĂ©finies pour qu'elles donnent la mĂȘme rĂ©ponse pour toutes les lignes d'un
groupe peer.
Notez que les fonctions first_value
,
last_value
et nth_value
ne
prennent en compte que les lignes à l'intérieur d'une
« fenĂȘtre », qui, par dĂ©faut, contient les lignes du dĂ©but de la
partition jusqu'au dernier peer de la ligne actuelle. Ceci risque de donner
des rĂ©sultats sans intĂ©rĂȘt pour last_value
et quelques
fois aussi pour nth_value
. Vous pouvez redéfinir la
fenĂȘtre en ajoutant une spĂ©cification convenable (RANGE
,
ROWS
ou GROUPS
) Ă la clause
OVER
. Voir Section 4.2.8
pour plus d'informations.
Quand une fonction d'agrĂ©gat est utilisĂ©e comme fonction de fenĂȘtrage, elle
agrĂšge les lignes dans la fenĂȘtre de la ligne courante. Un agrĂ©gat utilisĂ©
avec ORDER BY
et la dĂ©finition par dĂ©faut de la fenĂȘtre
produit un type de comportement du style « somme mouvante », qui
pourrait ĂȘtre ou pas ce qui est souhaitĂ©. Pour obtenir l'agrĂ©gat sur la
partition complĂšte, n'utilisez pas ORDER BY
ou utilisez
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED
FOLLOWING
. Les autres spĂ©cifications de fenĂȘtre peuvent ĂȘtre
utilisées pour obtenir d'autres effets.
Le standard SQL définit une option RESPECT NULLS
ou
IGNORE NULLS
pour les fonctions
lead
, lag
,
first_value
, last_value
et
nth_value
. Ceci n'est pas couvert dans
PostgreSQL : le comportement est toujours
identique au comportement par défaut du standard, autrement dit
RESPECT NULLS
. De mĂȘme, les options du standard
FROM FIRST
et FROM LAST
pour
nth_value
ne sont pas supportées : seul le
comportement par défaut, FROM FIRST
, l'est. (Vous
pouvez obtenir le résultat de FROM LAST
en inversant le
tri ORDER BY
.)