Fonctions de fenêtrage
Que sont les fonctions de fenêtrage dans PostgreSQL ?
Une fonction de fenêtrage calcule une valeur sur un ensemble de lignes liées, comme un rang ou un total cumulé, sans regrouper ces lignes en une seule comme le fait GROUP BY.
Une fonction de fenêtrage effectue un calcul sur un ensemble de lignes liées à la ligne courante, défini par une clause OVER. Contrairement à un agrégat avec GROUP BY, chaque ligne d’entrée reste dans le résultat et obtient sa propre valeur.
PARTITION BY répartit les lignes en groupes, et ORDER BY fixe l’ordre au sein de chaque groupe. Les fonctions de fenêtrage intégrées comprennent row_number, rank, dense_rank, lag, lead et first_value, et tout agrégat ordinaire comme sum ou avg peut être employé avec OVER. Les fonctions de fenêtrage ne sont autorisées que dans la liste SELECT et la clause ORDER BY d’une requête.
Exemple
L’exemple classe les joueurs au sein de leur équipe et affiche le total de points de l’équipe à côté de chaque ligne.
CREATE TABLE scores (player text, team text, points int);
INSERT INTO scores VALUES
('ana', 'red', 30), ('ben', 'red', 25), ('cy', 'blue', 40), ('dee', 'blue', 35);
SELECT player, team, points,
rank() OVER (PARTITION BY team ORDER BY points DESC) AS team_rank,
sum(points) OVER (PARTITION BY team) AS team_total
FROM scores
ORDER BY team, team_rank;Du SQL simple pour PostgreSQL 16 ou 17 standard, sans aucune extension. Exécutez-le dans une base de données vide que vous pouvez jeter ensuite.
Références
Documentation officielle de PostgreSQL (en anglais).