PaliSkill
SQL — Fonctions de fenêtrage

Leçon 1 / 9 — Chapitre 4: Agrégats de fenêtre et cadres

SUM() OVER : un total cumulé, pas un total global

Contrairement à SUM() avec GROUP BY, qui réduit chaque groupe à une seule ligne, SUM() OVER (... ORDER BY ...) conserve toutes les lignes et calcule, pour chacune, un total cumulé jusqu'à cette ligne.

Nouvelle table pour ce chapitre (montants en dollars) :

ventes_boutique
id | boutique | mois | montant
1  | Nord     | 1    | 100
2  | Nord     | 2    | 150
3  | Nord     | 3    | 200
4  | Sud      | 1    | 80
5  | Sud      | 2    | 80
6  | Sud      | 3    | 140
SELECT boutique, mois, montant,
  SUM(montant) OVER (PARTITION BY boutique ORDER BY mois) AS total_cumule
FROM ventes_boutique;

Pour Nord : mois 1 → 100 ; mois 2 → 100 + 150 = 250 ; mois 3 → 100 + 150 + 200 = 450. Chaque ligne accumule les montants des mois précédents et le sien, au sein de sa propre boutique.

À retenir :

  • SUM() OVER (... ORDER BY ...), sans précision de cadre, calcule par défaut un total cumulé (de la première ligne de la partition jusqu'à la ligne courante).
  • C'est la présence d'un ORDER BY dans la clause OVER qui déclenche ce comportement cumulatif — sans lui, comme on le verra dans la leçon suivante, le résultat est différent.

À vous de jouer : quel est le total_cumule pour la boutique Sud au mois 2 (80, puis 80) ?

À vous de jouer

À faire

Voici une table ventes_boutique (montants en dollars) :

ventes_boutique
id | boutique | mois | montant
1  | Nord     | 1    | 100
2  | Nord     | 2    | 150
3  | Nord     | 3    | 200
4  | Sud      | 1    | 80
5  | Sud      | 2    | 80
6  | Sud      | 3    | 140

Dans SELECT boutique, mois, montant, SUM(montant) OVER (PARTITION BY boutique ORDER BY mois) AS total_cumule FROM ventes_boutique;, quelle est la valeur de total_cumule pour Sud au mois 2 ?

Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.

💡 Un nombre (en dollars).

À vous de jouer

À faire

Dans cette même requête, quelle est la valeur de total_cumule pour Nord au mois 1 ?

Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.

💡 Un nombre (en dollars).

Quitter le module