Aide-mémoire3 min de lecture · Mis à jour le 29 sept. 2026
Fonctions de fenêtrage SQL — aide-mémoire analytique
Classements, cumuls, moyennes glissantes et comparaisons période sur période avec les fonctions de fenêtrage SQL.
- #sql
- #etl
Syntaxe
fonction(...) OVER (PARTITION BY groupe ORDER BY tri ROWS BETWEEN ... AND ...)
Contrairement à GROUP BY, la fenêtre conserve toutes les lignes.
Classements
SELECT region, vendeur, ca,
ROW_NUMBER() OVER (PARTITION BY region ORDER BY ca DESC) AS rang_unique,
RANK() OVER (PARTITION BY region ORDER BY ca DESC) AS rang_ex_aequo,
DENSE_RANK() OVER (PARTITION BY region ORDER BY ca DESC) AS rang_dense
FROM ventes_mensuelles;
Top 3 par région : filtrer rang_unique <= 3 dans une requête englobante (CTE).
Cumuls et moyennes glissantes
SELECT jour, ca,
SUM(ca) OVER (ORDER BY jour) AS ca_cumule,
AVG(ca) OVER (ORDER BY jour ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moyenne_7j
FROM ca_journalier;
Comparaison avec la période précédente
SELECT mois, ca,
LAG(ca) OVER (ORDER BY mois) AS ca_mois_prec,
round(100.0 * (ca - LAG(ca) OVER (ORDER BY mois)) / NULLIF(LAG(ca) OVER (ORDER BY mois), 0), 1) AS evolution_pct
FROM ca_mensuel;
Part du total
SELECT produit, ca, round(100.0 * ca / SUM(ca) OVER (), 2) AS part_pct FROM ca_produit;
Pièges
ORDER BYdansOVERsans cadre explicite → cadre par défautRANGE UNBOUNDED PRECEDING(valeurs égales regroupées).- Diviser par
NULLIF(x, 0)pour éviter les divisions par zéro. - Un KPI doit être défini par écrit (numérateur, dénominateur, filtres) avant d'être codé.