Skip to content

Eine laufende Summe berechnen (kumulativ) snippet

Eine laufende Summe summiert jede Zeile bis einschließlich der aktuellen — der klassische Job für Window-Funktionen, ohne Self-Join und ohne Subquery.

Eine laufende Summe summiert jede Zeile bis einschließlich der aktuellen — der klassische Job für Window-Funktionen, ohne Self-Join und ohne Subquery. Die Falle versteckt sich im Frame: Mit ORDER BY innerhalb von OVER ist der Default-Frame RANGE UNBOUNDED PRECEDING, und RANGE behandelt Peer-Zeilen (gleicher Sortierschlüssel) als einen Schritt — Zeilen mit Gleichstand bekommen alle dieselbe Summe. ROWS UNBOUNDED PRECEDING macht die Akkumulation Zeile für Zeile, was eine laufende Summe fast immer meint. Das ORDER BY ganz weglassen liefert stattdessen auf jeder Zeile die Gesamtsumme.

Runnable recipe · 1 languages
Files & Datasqlwindow-functionssumaggregatecumulative

Every language

1 languages, 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 →