Skip to content

Calculer un total cumulé (somme cumulative) snippet

Un total cumulé additionne chaque ligne jusqu'à la ligne courante incluse — le travail classique des fonctions de fenêtre, sans self-join ni sous-requête.

Un total cumulé additionne chaque ligne jusqu'à la ligne courante incluse — le travail classique des fonctions de fenêtre, sans self-join ni sous-requête. Le piège se cache dans le frame : avec un ORDER BY dans OVER, le frame par défaut est RANGE UNBOUNDED PRECEDING, et RANGE traite les lignes ex æquo (même clé de tri) comme une seule étape — toutes les lignes à égalité reçoivent le même total. ROWS UNBOUNDED PRECEDING rend l'accumulation ligne par ligne, ce qui correspond presque toujours à ce qu'on entend par total cumulé. Supprime complètement le ORDER BY et tu obtiens le total général sur chaque ligne à la place.

Recette exécutable · 1 langages
Files & Datasqlwindow-functionssumaggregatecumulative

Every language

1 langages, copy-ready. One at a time with syntax highlighting, or all inline.

SQLSQLrunnable
SELECT
    day,
    amount,
    SUM(amount) OVER (
        ORDER BY day
        ROWS UNBOUNDED PRECEDING
    ) AS running_total
FROM daily_sales
ORDER BY day;

Try it in the playground: add a duplicate day and watch the RANGE default give both rows the same total; ROWS fixes the accumulation. Moving 7-day window: ROWS BETWEEN 6 PRECEDING AND CURRENT ROW.

Run in the SQL playground →

Keep going

Read the sql-window-functions cheatsheet →