SQL Academy · Leçon

Totaux cumulés et moyennes mobiles

Calculez des sommes cumulées et des moyennes mobiles avec SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...).

Leçon 4 sur 413 étapes

Totaux cumulés et moyennes mobiles est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Bases du total cumulé

Un total cumulé est un SUM avec ORDER BY dans la fenêtre — sans clause de cadre, le cadre par défaut va « du début à la ligne actuelle » :

SELECT day, revenue,
       SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;

Total cumulé par groupe

Réinitialisez le total cumulé pour chaque utilisateur :

SELECT id, user_id, total,
       SUM(total) OVER (
         PARTITION BY user_id ORDER BY created_at
       ) AS user_running_total
FROM orders;

Moyenne glissante

Une moyenne glissante sur N jours utilise un cadre ROWS :

SELECT day, revenue,
       AVG(revenue) OVER (
         ORDER BY day
         ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
       ) AS avg_7d
FROM daily_revenue;

Moyenne glissante centrée

Fenêtre centrée sur 7 jours (3 jours avant, le jour actuel, 3 jours après) :

SELECT day, revenue,
       AVG(revenue) OVER (
         ORDER BY day
         ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
       ) AS avg_7d_centred
FROM daily_revenue;

Distribution cumulée

Quelle fraction du chiffre d'affaires total avons-nous atteinte à chaque jour ?

SELECT day, revenue,
       SUM(revenue) OVER (ORDER BY day)
         / SUM(revenue) OVER ()  AS cum_share
FROM daily_revenue;

ROWS contre RANGE

  • ROWS — compter les lignes physiquement (N lignes avant ou après)
  • RANGE — couvrir les valeurs logiquement (par exemple 7 jours en fonction de la date)
-- ROWS: 6 previous rows + this one (may skip dates with no data)
AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)

-- RANGE: include any row with a day within '6 days' of the current row
AVG(revenue) OVER (ORDER BY day RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW)

Maximum cumulé

Le meilleur résultat obtenu jusqu'à chaque instant :

SELECT day, total_users,
       MAX(total_users) OVER (ORDER BY day) AS peak_so_far
FROM daily_metrics;

Nombre cumulé

Nombre total d'événements observés jusqu'à cette ligne :

SELECT id, ts,
       COUNT(*) OVER (ORDER BY ts) AS events_so_far
FROM events;

Repérer les anomalies

Comparez le chiffre d'affaires du jour à la référence glissante :

SELECT day, revenue, avg_7d,
  CASE WHEN revenue < 0.5 * avg_7d THEN 'WARNING' ELSE 'OK' END AS status
FROM (
  SELECT day, revenue,
         AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING) AS avg_7d
  FROM daily_revenue
) sub;

NULL initiaux

Avec une fenêtre de 7 lignes, les 6 premières lignes ont des moyennes NULL ou partielles. Décidez s'il faut les supprimer ou considérer les fenêtres partielles comme valides.

Performances

Les agrégats cumulés nécessitent des données ordonnées selon la partition. Un index sur la colonne de ORDER BY évite le tri.

Récapitulatif

Les cadres permettent les calculs cumulés.

  • Cadre par défaut avec ORDER BY = « du début à la ligne actuelle »
  • ROWS BETWEEN n PRECEDING AND CURRENT ROW = fenêtre glissante
  • SUM/AVG/MAX sur des fenêtres = calculs cumulés ou glissants

Vérification rapide

Quelle clause de cadre fournit une moyenne glissante sur 7 jours jusqu'à la ligne actuelle ?

Gratuit pour commencer

Apprends SQL avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
46
Leçons
183

Questions Fréquemment Posées

La leçon « Totaux cumulés et moyennes mobiles » est-elle gratuite ?

Oui — le texte complet de « Totaux cumulés et moyennes mobiles » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Totaux cumulés et moyennes mobiles » ?

Calculez des sommes cumulées et des moyennes mobiles avec SUM(...) OVER (ORDER BY ... ROWS BETWEEN ...). Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Totaux cumulés et moyennes mobiles » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD et modèles de séries temporelles
  4. Totaux cumulés et moyennes mobiles
← Retour à SQL Academy