Zurück zur Artikelliste Artikel
7 Leseminuten

Business SQL: Wie man das Umsatzwachstum in SQL berechnet

Können Sie SQL in Ihrem Unternehmen einsetzen? Natürlich können Sie das! Sie können zum Beispiel das Umsatzwachstum mit SQL berechnen - hier erfahren Sie, wie.

Als jemand, der mit Daten arbeitet, wissen Sie bereits, dass SQL das am häufigsten verwendete Werkzeug in der Datenanalyse ist. Aber inwiefern ist SQL für den geschäftlichen Einsatz hilfreich? Nun, die Antwort liegt auf der Hand: Analysieren Sie Geschäftsdaten mit SQL! Allerdings gibt es bei Geschäftsdaten einige Besonderheiten, die schwierig sein können, wenn man nicht damit vertraut ist. Diese Besonderheiten erfordern auch einige SQL-Funktionen, die Sie vielleicht noch nicht verwendet haben: Fensterfunktionen.

Wenn Sie mit den SQL-Fensterfunktionen nicht vertraut sind, empfehle ich Ihnen, sich ein wenig mit ihnen vertraut zu machen, bevor Sie fortfahren. Dieser Überblick über Fensterfunktionen bietet Ihnen einen guten Einstieg, ebenso wie dieser Artikel über Fensterfunktionen mit Beispielen.

Wenn Sie mit den Fensterfunktionen bereits einigermaßen vertraut sind und eine kurze Auffrischung brauchen, bevor Sie sich in die Materie vertiefen, hilft Ihnen unser SQL Fensterfunktionen Cheat Sheet, die Beispiele zu verstehen, die ich Ihnen zeigen werde.

Warum das Umsatzwachstum berechnen?

Das Umsatzwachstum ist in jedem Unternehmen eine wichtige Kennzahl. Unabhängig davon, ob es realisiert (tatsächlich) oder prognostiziert wird, sind Umsatzwachstumsstatistiken die Grundlage für Unternehmensplanung und Entscheidungsfindung. Gehälter, neue Investitionen, Aktienkurse - alles basiert auf dem Umsatzwachstum (oder -rückgang).

Die Berechnung des Umsatzwachstums in SQL ist jedoch nicht so einfach. Warum nicht? Weil dazu die Differenz zwischen zwei verschiedenen Zeilen und nicht zwischen zwei verschiedenen Spalten ermittelt werden muss. Jeder SQL-Neuling kann die Differenz zwischen zwei Spalten ermitteln. Aber wie subtrahiert man Zeilen?

Verwendung der Funktionen LEAD() und LAG() zur Berechnung des Umsatzwachstums

Sowohl LEAD() als auch LAG() sind Fensterfunktionen. Mit der Funktion LEAD() können Sie Daten aus einer nachfolgenden Zeile abrufen und in der aktuellen Zeile verwenden. Die Funktion LAG() ist genau das Gegenteil; Sie verwenden sie, um die Daten aus einer vorherigen Zeile zu erhalten.

Bevor wir weitermachen, sollten Sie sich mit der Syntax der beiden Funktionen vertraut machen.

Beispiel

In diesem Beispiel verwenden Sie die Tabelle monthly_revenue. Diese Tabelle hat die folgenden Spalten:

  • id - Die ID des Monats und der Primärschlüssel der Tabelle.
  • month - Der Monat.
  • revenue - Der Betrag der Einnahmen.

Die Tabelle enthält die monatlichen Einnahmen für zwei Jahre, 2019 und 2020. Sie müssen das monatliche Umsatzwachstum berechnen. Außerdem müssen Sie für jeden Monat den Umsatzwert für den gleichen Monat des folgenden Jahres anzeigen.

Bevor ich meinen Code schreibe, möchte ich sicherstellen, dass Sie die Logik verstehen. Wenn Sie sie einmal verstanden haben, wird es viel einfacher sein, Ihren eigenen Code zu schreiben.

Das monatliche Umsatzwachstum beruht auf einfacher Mathematik - Subtraktion. Sie müssen die Einnahmen des aktuellen Monats nehmen und die Einnahmen des Vormonats abziehen. Ein Beispiel:

monthrevenue
2019-01-311,237,844.22
2019-02-281,348,523.26

Sie können das Umsatzwachstum für den 31.01.2019 nicht berechnen, weil es keinen vorherigen Zeitraum gibt, mit dem Sie es vergleichen können. Aber Sie können es für den 28.02.2019 tun. Und wie? Ganz einfach: 1.348.523,26 - 1.237.844,22 = 110.679,04.

Wie wäre es, die Einnahmen dieses Monats im nächsten Jahr zu ermitteln (z. B. durch einen Vergleich von Januar 2019 und Januar 2020)? Dazu müssen Sie Folgendes tun:

monthrevenue
2019-01-311,237,844.22
2019-02-281,348,523.26
2019-03-311,028,423.12
2019-04-301,567,213.49
2019-05-312,108,669.68
2019-06-301,984,632.44
2019-07-31224,557.74
2019-08-312,249,995.11
2019-09-302,104,567.63
2019-10-312,008,412.00
2019-11-302,331,114.50
2019-12-311,978,412.62
2020-01-311,645,112.22

Angenommen, Ihre Daten sehen wie folgt aus: Sie müssen irgendwie 12 Zeilen überspringen, um die Daten zu erhalten. Für den 31.01.2019 müssen Sie den aktuellen Wert anzeigen, der 1.237.844,22 beträgt. Sie müssen aber auch die Daten für den 31.01.2020 (1.645.112,22) ermitteln und in die Spalte rechts neben den aktuellen Einnahmen einfügen.

Nun ist es an der Zeit, den Code für die Problemlösung zu schreiben:

SELECT	month,
		revenue,
		revenue - LAG (revenue) OVER (ORDER BY month ASC) AS revenue_growth,
		LEAD (revenue, 12) OVER (ORDER BY month ASC) AS next_year_revenue
FROM monthly_revenue;

Dieser Code beginnt mit der Auswahl der Spalten month und Umsatz; Sie benötigen diese Daten in Ihrem Ergebnis. In der nächsten Zeile wird die Funktion LAG() verwendet, um das Umsatzwachstum gegenüber dem Vormonat zu berechnen. Sie überträgt die Logik, die ich Ihnen erklärt habe, einfach in einen Code. Denken Sie daran, dass LAG() die Daten aus der vorherigen Zeile bezieht.(Hinweis: LAG() kann Daten aus n Zeilen zurückliefern, wenn Sie das optionale Offset-Argument verwenden, d. h. LAG(spalten_name, n). Wenn Sie das Offset-Argument weglassen, wird der Wert aus der vorherigen Zeile zurückgegeben.) In dieser Zeile wird also die Umsatzspalte der aktuellen Zeile genommen und der Umsatzwert der vorherigen Zeile davon abgezogen; die vorherige Zeile ist der Umsatz des Vormonats.

Beachten Sie, dass LAG() eine Fensterfunktion ist und daher die Klausel OVER() zwingend erforderlich ist. In unserer OVER() gibt es eine ORDER BY-Klausel, die besagt, dass die Fensterfunktion nach dem Monat in aufsteigender Reihenfolge ausgeführt werden soll. Mit anderen Worten, sie beginnt am 31.01.2019 und geht bis zum 31.12.2020, Monat für Monat. Ich habe diese Spalte revenue_growth genannt.

In der folgenden Codezeile wird die Funktion LEAD() window verwendet. Denken Sie daran, dass Sie mit dieser Funktion die Daten aus einer kommenden Zeile abrufen können. Sie können festlegen, wie viele Zeilen die Funktion "springen" soll, genau wie bei LAG(). In diesem Fall benötige ich die Daten 12 Zeilen von der aktuellen Zeile entfernt; deshalb steht der Offset von 12 innerhalb der Klammern der Funktion. Auch hier haben wir eine OVER() Klausel mit dem gleichen Prinzip wie oben: die Funktion wird nach Monat aufsteigend ausgeführt. Ich habe diese Spalte next_year_revenue genannt.

Das ist gar nicht so schwer, wenn man die Logik verstanden hat, oder? Hier ist das Ergebnis:

monthrevenuerevenue_growthnext_year_revenue
2019-01-311,237,844.22NULL1,645,112.22
2019-02-281,348,523.26110,679.041,025,411.77
2019-03-311,028,423.12-320,100.141,331,224.45
2019-04-301,567,213.49538,790.371,812,225.92
2019-05-312,108,669.68541,456.191,945,331.62
2019-06-301,984,632.44-124,037.242,592,333.88
2019-07-31224,557.74-1,760,074.702,108,496.66
2019-08-312,249,995.112,025,437.372,512,367.31
2019-09-302,104,567.63-145,427.482,662,398.45
2019-10-312,008,412.00-96,155.632,925,568.13
2019-11-302,331,114.50322,702.503,108,469.22
2019-12-311,978,412.62-352,701.883,009,964.39
2020-01-311,645,112.22-333,300.40NULL
2020-02-291,025,411.77-619,700.45NULL
2020-03-311,331,224.45305,812.68NULL
2020-04-301,812,225.92481,001.47NULL
2020-05-311,945,331.62133,105.70NULL
2020-06-302,592,333.88647,002.26NULL
2020-07-312,108,496.66-483,837.22NULL
2020-08-312,512,367.31403,870.65NULL
2020-09-302,662,398.45150,031.14NULL
2020-10-312,925,568.13263,169.68NULL
2020-11-303,108,469.22182,901.09NULL
2020-12-313,009,964.39-98,504.83NULL

Der Wert NULL in der Spalte revenue_growth bedeutet, dass es keine Daten vor dem 31.01.2019 gibt.

Der Wert NULL in next_year_revenue bedeutet, dass es 12 Monate nach diesem Monat keine Daten mehr gibt.

Weitere Möglichkeiten zum Üben der Funktion LAG() finden Sie in diesem Artikel über die Berechnung der Differenz zwischen zwei Zeilen.

Wie wäre es, dem obigen Ergebnis noch etwas hinzuzufügen? Vielleicht den Prozentsatz des Umsatzwachstums?

Berechnung des prozentualen Umsatzwachstums

Die Darstellung des Wachstums in Prozent ist in der Regel noch hilfreicher als die Angabe der absoluten Werte. Vorstände denken besonders gerne in Prozenten. Es wäre sehr hilfreich, wenn Ihr Bericht auch diese Daten enthalten würde.

Um dieses Ergebnis zu erhalten, können wir die gleichen Daten und den gleichen Code wie oben verwenden. Wir fügen nur eine Codezeile hinzu:

SELECT	month,
		revenue,
		revenue - LAG (revenue) OVER (ORDER BY month ASC) AS revenue_growth,
		(revenue - LAG (revenue) OVER (ORDER BY month ASC))/LAG (revenue) OVER (ORDER BY month ASC)*100 AS revenue_percentage_growth,
		LEAD (revenue, 12) OVER (ORDER BY month ASC) AS next_year_revenue
FROM monthly_revenue;

Hier ist die Logik für die Berechnung des prozentualen Wachstums:

(current month revenue - previous month revenue)/previous month revenue * 100. 

Zum Beispiel:

monthrevenue
2019-01-311,237,844.22
2019-02-281,348,523.26

Das prozentuale Umsatzwachstum für den 28.02.2019 wird wie folgt berechnet:

(1,348,523.26 - 1,237,844.22)/1,237,844.22 * 100 = 8.94%.

Im obigen Code ist dies die Zeile, die genau das tut:

(revenue - LAG (revenue) OVER (ORDER BY month ASC))/LAG (revenue) OVER (ORDER BY month ASC)*100 AS revenue_percentage_growth. 

Es ist wahrscheinlich nicht nötig, dies noch einmal zu erklären. Sie verstehen, wie die Funktion LAG() funktioniert und welche Mathematik hinter der Berechnung steckt. Hier ist das Ergebnis:

monthrevenuerevenue_growthrevenue_percentage_growthnext_year_revenue
2019-01-311,237,844.22NULLNULL1,645,112.22
2019-02-281,348,523.26110,679.048.941,025,411.77
2019-03-311,028,423.12-320,100.14-23.741,331,224.45
2019-04-301,567,213.49538,790.3752.391,812,225.92
2019-05-312,108,669.68541,456.1934.551,945,331.62
2019-06-301,984,632.44-124,037.24-5.882,592,333.88
2019-07-31224,557.74-1,760,074.70-88.692,108,496.66
2019-08-312,249,995.112,025,437.37901.972,512,367.31
2019-09-302,104,567.63-145,427.48-6.462,662,398.45
2019-10-312,008,412.00-96,155.63-4.572,925,568.13
2019-11-302,331,114.50322,702.5016.073,108,469.22
2019-12-311,978,412.62-352,701.88-15.133,009,964.39
2020-01-311,645,112.22-333,300.40-16.85NULL
2020-02-291,025,411.77-619,700.45-37.67NULL
2020-03-311,331,224.45305,812.6829.82NULL
2020-04-301,812,225.92481,001.4736.13NULL
2020-05-311,945,331.62133,105.707.34NULL
2020-06-302,592,333.88647,002.2633.26NULL
2020-07-312,108,496.66-483,837.22-18.66NULL
2020-08-312,512,367.31403,870.6519.15NULL
2020-09-302,662,398.45150,031.145.97NULL
2020-10-312,925,568.13263,169.689.88NULL
2020-11-303,108,469.22182,901.096.25NULL
2020-12-313,009,964.39-98,504.83-3.17NULL

Jetzt, wo Sie gelernt haben, wofür Sie gekommen sind, ist es vielleicht an der Zeit für etwas mehr? Zum Beispiel einige fortgeschrittene SQL-Abfragen, die Sie in der Finanzanalyse verwenden können?

Möchten Sie auch an Ihrer beruflichen Entwicklung arbeiten?

Ich denke, es ist hilfreich zu wissen, wie man das Umsatzwachstum berechnet. Als Datenanalytiker werde ich oft gebeten, ähnliche Berichte zu erstellen, wie ich sie Ihnen hier gezeigt habe. Es handelt sich um wichtige Daten, die in der Wirtschaft ständig analysiert werden. Nachdem Sie nun gelernt haben, die Funktionen von LAG() und LEAD() zu nutzen, können Sie sie für jede Art von Daten verwenden. In der Geschäftswelt werden Sie viele Gelegenheiten dazu haben.

Wenn Sie keine Möglichkeit haben, SQL-Fensterfunktionen zu üben - oder wenn Sie Ihre Kenntnisse einfach nur auffrischen wollen -, könnte ein Fensterfunktionen Kurs eine gute Entscheidung sein. Und wenn Sie sich fragen, warum das so ist, finden Sie hier einen Artikel mit der Antwort auf Ihre Frage.