Aller au contenu

Fonctions de fenêtrage (window functions)#

avancé

Utiles pour les classements et les comparaisons ligne à ligne, mais rarement nécessaires dans une application courante : vérifier d'abord qu'un GROUP BY ne suffit pas.

Syntaxe#

fonction(...) OVER (
  [PARTITION BY colonnes]
  [ORDER BY colonnes]
  [ROWS|RANGE BETWEEN debut AND fin]
)

Fonctions disponibles#

Fonction Description
ROW_NUMBER() Numéro de ligne dans la partition
RANK() Rang (avec trous en cas d'égalité)
DENSE_RANK() Rang (sans trous)
NTILE(n) Répartit en n groupes
LAG(x [, n [, defaut]]) Valeur n lignes avant
LEAD(x [, n [, defaut]]) Valeur n lignes après
FIRST_VALUE(x) / LAST_VALUE(x) Première/dernière valeur de la fenêtre
SUM/AVG/COUNT/MIN/MAX(x) OVER (...) Agrégats en fenêtrage

Exemples#

SELECT nom, age,
  RANK() OVER (ORDER BY age DESC) AS rang
FROM etudiants;

SELECT nom, ville,
  ROW_NUMBER() OVER (PARTITION BY ville ORDER BY nom) AS num
FROM etudiants;

SELECT nom, age,
  age - LAG(age) OVER (ORDER BY id) AS diff_precedent
FROM etudiants;

Nommer une fenêtre (clause WINDOW) avancé#

SELECT nom, AVG(age) OVER w
FROM etudiants
WINDOW w AS (PARTITION BY ville);

SQLite

Fonctions de fenêtrage disponibles depuis SQLite 3.25 (2018).