SQL: Laufende Summe bilden

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



SQL-Dialekte, die keine Window-Funktionen unterstützen, sind bei der Berechnung einer laufenden Summe auf eine Unterabfrage angewiesen, die einen skalaren Wert liefert.


Hinweis für Access-Anwender
Um die folgende Abfrage selbst testen zu können, müssen die Tabellen der Übungsdatenbank vorhanden sein.

Lösung mittels Unterabfrage

Diese Abfrage liefert die laufende Summe aller Gehälter aufsteigend nach ma_nr sortiert:

SELECT ma_name,
       gehalt,
       ( SELECT sum( gehalt )
         FROM   mitarbeiter
         WHERE  ma_nr <= m.ma_nr ) AS lfd_gehalt
FROM   mitarbeiter AS m
ORDER  BY ma_nr
ma_name gehalt lfd_gehalt
Schmidt 800 800
Allard 1600 2400
Wecker 1250 3650
Johann 2975 6625
Mertens 1250 7875
Blank 2850 10725
Kühne 2450 13175
Scheidt 3000 16175
König 5000 21175
Dreher 1500 22675
Adam 1100 23775
Jakobs 950 24725
Fuhrmann 3000 27725
Müller 1300 29025

Lösung mittels Window-Funktion

Eine analoge Abfrage mittels Window-Funktion könnte so aussehen:

SELECT ma_name,
       gehalt,
       SUM( gehalt ) OVER ( ORDER BY ma_nr ) AS lfd_gehalt
FROM   mitarbeiter
ORDER  BY ma_nr

Zusätzlich könnte man hier auch aufsteigend nach gehalt sortieren, was bei der Methode mit der Unterabfrage nicht so ohne weiteres möglich ist.

SELECT ma_name,
       gehalt,
       SUM( gehalt ) OVER ( ORDER gehalt, BY ma_nr ) AS lfd_gehalt
FROM   mitarbeiter
ORDER  BY ma_nr

Die beiden Abfragen können für PostgreSQL in diesem DBFiddle betrachtet werden.



Zurück zur Übersicht