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.65. 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.65. Fonctions de fenêtrage à usage général
Toutes les fonctions listées dans Tableau 9.65
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
.)