Zurück zur Artikelliste Artikel
9 Leseminuten

7 Situationen aus dem wirklichen Leben, in denen Sie eine laufende Summe benötigen und wie Sie diese in SQL berechnen können

Möchten Sie erfahren, was eine laufende Summe ist und wie man sie in SQL berechnet? In diesem Artikel beschreibe ich verschiedene Geschäftsszenarien, in denen eine laufende Summe benötigt wird. Außerdem zeige ich Ihnen, wie Sie eine laufende Summe in SQL mit Hilfe von Fensterfunktionen berechnen können. Sind Sie bereit? Los geht's!

Definition der laufenden Summe

Eine laufende Summe ist die kumulative Summe eines Wertes und aller vorherigen Werte in der Spalte.

Stellen Sie sich zum Beispiel vor, Sie sind im Verkauf tätig und speichern Informationen über die Anzahl der an einem bestimmten Tag verkauften Artikel. Sie möchten vielleicht eine laufende Summe berechnen, also die Gesamtzahl der verkauften Artikel bis zu einem bestimmten Datum.

Nachfolgend finden Sie eine Tabelle mit der Anzahl der an einem bestimmten Tag verkauften Artikel:

dateno_of_itemsrunning_total
2021-01-0110150
2021-01-021222
2021-01-031537
2021-01-04946
2021-01-052066
2021-01-061581
2021-01-071394
2021-01-0817111
2021-01-0921132
2021-01-1019151
2021-01-1116167
2021-01-1213180

Anzahl der verkauften Artikel und laufende Summe

Die dritte Spalte ist die berechnete Gesamtsumme. Beachten Sie, dass der aktuelle Zeilenwert immer in der laufenden Summe enthalten ist.

Am 05. Januar 2021 zum Beispiel beträgt die laufende Summe 66. Dies ist die Gesamtzahl der verkauften Artikel vom 01. Januar 2021 bis zum 05. Januar 2021 (einschließlich des 05. Januar 2021). Konkret lautet die Berechnung 10 + 12 + 15 + 9 + 20 = 66.

Berechnung der laufenden Summe in SQL

In SQL wird die laufende Summe mit Hilfe von Fensterfunktionen berechnet. Mit dieser speziellen SQL-Funktion können komplexe Berechnungen mit nur wenigen Zeilen SQL-Code durchgeführt werden.

Hier ist die Fensterfunktion für unser obiges Beispiel:

SELECT *,
      SUM(no_of_items) OVER(ORDER BY date) AS running_total 
FROM sales

Und hier ist eine Erklärung des Codes:

  • Dies ist eine Fensterfunktion, die mit der OVER -Klausel gekennzeichnet ist.
  • Innerhalb der OVER-Klausel befindet sich ein ORDER BY, das angibt, wie die Zeilen vor der Berechnung angeordnet sind. In unserem Fall sind die Zeilen nach der Datumsspalte geordnet.
  • Bei der Verwendung von Fensterfunktionen wird für jeden Datensatz eine eigene Berechnung durchgeführt. Das Ergebnis wird also mit einer zusätzlichen Spalte angezeigt. Bei der Arbeit mit Fensterfunktionen gibt es keine eingeklappten Zeilen. Dies ist der Hauptunterschied zwischen der GROUP BY Klausel und Fensterfunktionen in SQL.
  • Innerhalb der OVER-Anweisung finden Sie möglicherweise auch das Schlüsselwort PARTITION BY. PARTITION BY gruppiert Zeilen in Partitionen, wobei jede Partitionsberechnung separat durchgeführt wird. In unserem Beispiel sind die Zeilen nicht in Partitionen organisiert. Der gesamte Datensatz wird also als eine Gruppe behandelt.
  • Bei der Arbeit mit Fensterfunktionen definieren wir für jeden Datensatz in einer Tabelle einen Fensterrahmen, innerhalb dessen eine bestimmte Berechnung durchgeführt wird. Dies wird durch das Schlüsselwort ROW/RANGE innerhalb der Anweisung OVER angegeben. Wenn dieses Schlüsselwort nicht definiert ist (wie in unserem Beispiel), wird ein Standardwert für den Fensterrahmen verwendet. Ein Standard-Fensterrahmen für die aktuelle Zeile umfasst die aktuelle Zeile und alle vorherigen Zeilen.
  • In unserem Beispiel wird die Gesamtsumme jedes Datensatzes in der Tabelle durch Summierung aller vorherigen Werte plus des aktuellen Wertes berechnet. Zum Beispiel beträgt die laufende Summe für den 05. Januar 2021 66. Dies ist die Summe der vier vorherigen Werte (10, 12, 15 und 9) plus dem Wert in der aktuellen Zeile (20).

Beispiele für laufende Summen

Schauen wir uns nun einige reale Szenarien an, in denen laufende Summen verwendet werden.

1. die Verfolgung von geplanten und realisierten Quoten

Im Vertrieb muss jeder Vertriebsmitarbeiter Ziele erreichen, um bestimmte Arbeitsanforderungen zu erfüllen. Auch in der Telekommunikations- und Bankenbranche muss jede Abteilung in jedem Quartal eine bestimmte Anzahl neuer Kunden gewinnen und eine bestimmte Anzahl von Produkten an Kunden verkaufen.

Das Management verfolgt die Leistung anhand laufender Summen. Jeden Tag wird die laufende Summe mit neuen Daten aktualisiert. Diese Zahlen werden in der Regel monatlich, vierteljährlich oder jährlich ausgewertet.

Die folgende Tabelle zeigt die Anzahl der neuen Kredite im Jahr 2021 auf monatlicher Basis:

dateplanplan_running_totalrealizationrealization_running_total
2021-01-3160606868
2021-02-287513544112
2021-03-31100235--
2021-04-30100335--
2021-05-31100435--
2021-06-30100535--

Anzahl der neuen Kredite, geplant vs. realisiert

Für das erste Halbjahr 2021 wird beschlossen, dass in diesem Zeitraum 535 Darlehen an Kunden verkauft werden sollen. Die Planungen werden für jeden Monat einzeln vorgenommen, und 535 ist das laufende Gesamtziel für diese sechs Monate.

Das Management verfolgt die geplanten gegenüber den realisierten Quoten. Bislang wurden 112 neue Darlehen verkauft. Die Tabelle wird im Laufe der Zeit immer wieder aktualisiert.

Nachfolgend finden Sie den SQL-Code zur Berechnung der laufenden Summen:

SELECT 
      date,
      plan,
      SUM(plan) OVER(order by Date) AS plan_running_total,
      realization,
      SUM(realization) OVER(order by Date) AS realization_running_total
FROM sales;

Wie im vorherigen Beispiel wird eine Fensterfunktion zur Berechnung der laufenden Summe verwendet. Die Fensterfunktion wird mit OVER bezeichnet, und innerhalb der Klammern wird die Reihenfolge der Zeilen definiert.

Die verwendete Aggregationsfunktion ist SUM. Wir haben zwei laufende Summen: ?geplante und realisierte Quoten. Wir haben also zwei Fensterfunktionen, und die Tabelle wird um zwei Spalten erweitert.

2. Berechnungen der Bilanz

Laufende Summen werden auch bei der Berechnung des Saldos verwendet. Jedes Mal, wenn eine neue Transaktion durchgeführt wird (eine Zahlung auf ein Konto oder eine Abhebung von einem Konto), wird die kumulierte Summe aktualisiert, und der aktuelle Saldo wird angezeigt.

Unten sehen Sie eine Saldotabelle:

datetransactionbalance_amount
2020-12-0150005000
2020-12-03-504950
2020-12-04-1254825
2020-12-05-1854640
2020-12-06-1424498
2020-12-09-3504148
2020-12-10-5603588
2020-12-11-803508
2020-12-12-153493

Transaktionsbetrag und aktueller Saldo

In der obigen Tabelle sehen wir, dass die erste Transaktion am 01.12.2020-12-01 stattfand, ein Zufluss von 5.000 $. Der Saldo an diesem Tag betrug 5.000 $. Danach begann der Kunde, Geld auszugeben.

Am 03.12.2020 gab der Kunde 50 $ aus (diese Transaktion wird mit einem negativen Wert angezeigt). Damit sank der Saldo auf 4.950 $. Am nächsten Tag verringerte sich der Saldo um weitere 125 $ auf 4.825 $ und so weiter.

Der Kontostand wird als laufende Summe berechnet. Er ist die kumulative Summe aller mit diesem Konto verbundenen Transaktionen. Mit jeder neuen Transaktion wird der Saldo aktualisiert, d. h. die laufende Summe wird neu berechnet.

Hier ist die Fensterfunktion für dieses Beispiel:

SELECT date,
            transaction,
           SUM(transaction) OVER(order by date) AS balance_amount 
FROM balance;

3. Operationen in der Registrierkasse

Laufende Summen werden auch bei Kassenvorgängen verwendet.

Wenn zum Beispiel ein Kunde in einem Geschäft einkauft, scannt der Kassierer die Artikel im Korb. Bei jedem neu eingescannten Artikel wird die aktualisierte Gesamtsumme auf dem Bildschirm angezeigt. Diese zeigt an, wie viel der Kunde für die bisher eingescannten Artikel zu zahlen hat.

Unten sehen Sie ein Beispiel für einen Korb, der gerade gescannt wird. Die Windeln sind der zuletzt gescannte Artikel. Bis jetzt muss der Kunde 19,70 EUR bezahlen. Das Shampoo wurde noch nicht verarbeitet, daher ist sein Preis noch nicht in der laufenden Summe enthalten:

productdatequantityprice(EUR)running_total
bread2021-02-05 8:01:1011.21.2
milk2021-02-05 8:02:02112.2
apple2021-02-05 8:02:3022.54.7
icecream2021-02-05 8:03:01226.7
diapers2021-02-05 8:03:1011319.7
shampoo14-

Registrierkasse: Scannen von Produkten

Dies ist fast die gleiche Fensterfunktion wie im vorherigen Beispiel (nur die Tabellen- und Spaltennamen unterscheiden sich):

SELECT 
       *,
      SUM(price) OVER(order by date) as running_total 
FROM cash_register;

Jedes Mal, wenn die Kassiererin einen Artikel einscannt, wird die kumulierte Summe aktualisiert. Mit jedem Scannen weiß die Kassiererin, wie viel der Kunde bis dahin zu zahlen hat.

4. Zählen der täglichen Kalorienzufuhr

Wenn Sie abnehmen möchten, können Sie Ihre tägliche Kalorienzufuhr anhand einer laufenden Summe berechnen. Jeden Tag beginnen Sie mit der Kalorienzählung bei Null und aktualisieren dann die laufende Summe auf der Grundlage dessen, was und wie viel Sie essen.

Unten sehen Sie eine Kalorienzählung für einen Tag:

hoursfoodquantitycaloriesrunning_total
8:30eggs2150150
8:30bread170220
8:30milk1105325
8:30butter140365
10:30banana1105470
11:30apple190560
13:30bread2150710
13:30meat13501060
13:30soup1801140
13:30salad1301170
16:00icecream12501420
17:00cake13201740
20:00sandwich13002040

Die laufende Gesamtzahl wird jedes Mal aktualisiert, wenn Sie etwas essen. So wissen Sie immer, wie viel Sie bereits gegessen haben und wie viel Sie an diesem Tag noch essen können. Dieser Ansatz wird als Kalorienzählen bezeichnet und ist eine beliebte Option.

Hier ist der Code, mit dem die laufende Summe berechnet wird:

SELECT calorie_intake.*,
      SUM(calories) OVER(ORDER BY hours) AS running_total
FROM calorie_intake;

Gehen wir noch ein paar weitere Szenarien durch, in denen laufende Summen verwendet werden. Denken Sie daran, dass die Fensterfunktionen zur Berechnung der Gesamtzahl der gelaufenen Runden meist gleich bleiben. Daher werde ich die Beispiele von nun an kurz erläutern, ohne den SQL-Code einzubeziehen.

5. bestätigte COVID-19-Fälle

Jedes Land sammelt jeden Tag Informationen über die Gesamtzahl der bestätigten COVID-19-Fälle, der Todesfälle und der geheilten Fälle. Mit diesen neuen Informationen werden die laufenden Summen aktualisiert, so dass jedes Land weiß, wie viele bestätigte Fälle, Todesfälle und geheilte Fälle es seit Beginn der Pandemie bis jetzt hatte.

Weitere Einzelheiten zur Berechnung der laufenden Gesamtzahl anhand der John Hopkins-Daten finden Sie unter: Analyse der COVID-19-Daten.

6. registrierte Nutzer einer mobilen Anwendung

Besitzer mobiler Anwendungen möchten in der Regel die kumulative Summe der neu registrierten Nutzer und der Installationen/Deinstallationen im letzten Monat, Quartal und/oder Jahr sehen. Auch hier können Sie laufende Summen verwenden, um einen besseren Einblick zu erhalten. Diese Statistiken geben Aufschluss darüber, wie die Anwendung oder eine bestimmte Funktion angenommen wurde und wie das Produkt in Zukunft weiterentwickelt werden kann.

Wenn Sie eine Website betreiben, ist die Gesamtzahl der Seitenaufrufe oder Besuche eine der wichtigsten Kennzahlen, die Sie verfolgen sollten. Diese Informationen werden in der Regel täglich erfasst. Durch die Berechnung der laufenden Gesamtzahl können Sie sehen, wie sich die kumulierte Summe im Laufe der Zeit verhält und wie sie sich mit früheren laufenden Gesamtzahlen vergleicht.

7) Treueprogramme von Fluggesellschaften

Dieses Konzept ist denjenigen, die häufig fliegen, wahrscheinlich bekannt. Mit jedem Flug sammeln Sie Punkte. Sobald Sie eine bestimmte Anzahl von Punkten gesammelt haben, erhalten Sie Rabatte und/oder Prämien.

Die Gesamtzahl der Punkte, die Sie auf Ihrem Konto haben, wird anhand einer laufenden Summe berechnet. Jedes Mal, wenn Sie ein Ticket kaufen, wird die laufende Summe aktualisiert, und Ihr Punktestand erhöht sich.

Zusammenfassung

In diesem Artikel habe ich gezeigt, wie laufende Summen in verschiedenen Szenarien verwendet werden. Wie Sie gelernt haben, haben laufende Summen viele Anwendungen.

Mit SQL-Fensterfunktionen können Sie laufende Summen relativ einfach mit nur wenigen Zeilen Code berechnen. Fensterfunktionen werden verwendet, wenn es um komplexe Berechnungen geht. Sobald Sie die Syntax gelernt haben, werden Sie saubereren und verständlicheren Code schreiben.

Obwohl ich nur erklärt habe, wie man Fensterfunktionen für laufende Summenberechnungen verwendet, werden Fensterfunktionen für eine Vielzahl von Berechnungen eingesetzt. In diesem Artikel mit Beispielen für Fensterfunktionen erfahren Sie mehr über andere Möglichkeiten, Fensterfunktionen zu verwenden.

Wir bieten auch einen großartigen interaktiven Fensterfunktionen Kurs mit vielen Beispielen an. Wenn Sie tief in die Fensterfunktionen eintauchen möchten, empfehle ich Ihnen diesen Kurs sehr. Er bietet eine Fülle von Übungen, was wichtig ist, wenn man sich neue SQL-Kenntnisse aneignet.