Leçon 6 / 9 — Chapitre 4: Agrégats de fenêtre et cadres
ROWS vs RANGE : ce qui change en présence d'ex-aequo
Sans précision, le cadre par défaut d'une fonction avec ORDER BY est RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW — et RANGE traite différemment les lignes ex-aequo (mêmes valeurs sur la colonne ORDER BY) par rapport à ROWS.
Sur la boutique Sud, triée par montant (80, 80, 140) :
-- RANGE (comportement par défaut)
SELECT montant,
SUM(montant) OVER (PARTITION BY boutique ORDER BY montant) AS somme_range
FROM ventes_boutique WHERE boutique = $q2$Sud$q2$;
-- ROWS (comportement explicite, ligne par ligne)
SELECT montant,
SUM(montant) OVER (
PARTITION BY boutique ORDER BY montant
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS somme_rows
FROM ventes_boutique WHERE boutique = $q2$Sud$q2$;
Avec RANGE, les deux lignes à 80 sont considérées comme des pairs (« peers ») : elles reçoivent toutes les deux la même somme, 80 + 80 = 160, comme si elles étaient traitées ensemble. Avec ROWS, chaque ligne est comptée individuellement selon l'ordre physique de livraison : l'une des deux lignes à 80 reçoit 80, l'autre 160 — mais laquelle reçoit quoi n'est pas garanti sans un critère de tri supplémentaire pour les départager. Dans les deux cas, la ligne à 140 (non ex-aequo) reçoit 80 + 80 + 140 = 300, une fois les deux 80 déjà comptés.
À retenir :
RANGEregroupe les lignes ex-aequo (mêmes valeurs de tri) en une seule « couche » : elles reçoivent toutes la même valeur de cadre.ROWStraite chaque ligne individuellement selon l'ordre physique, sans regrouper les ex-aequo — leurs valeurs de cadre respectives peuvent différer, et laquelle est laquelle dépend de l'ordre de livraison si aucun départage n'est précisé.- Sur une colonne ORDER BY sans ex-aequo (comme
moisdans les leçons précédentes), ROWS et RANGE donnent exactement le même résultat : la différence n'apparaît qu'en présence d'égalités.
À vous de jouer : avec RANGE, les deux lignes de Sud à 80 reçoivent-elles la même valeur de somme_range ? Et avec ROWS, cela est-il garanti ?
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 72 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès