Zurück zur Artikelliste Artikel
10 Leseminuten

Ein Überblick über Aggregatfunktionen in SQL

Aggregatfunktionen werden in SQL häufig verwendet. Dieser Artikel führt Sie durch ihre Verwendung und zeigt Ihnen Beispiele, wie sie funktionieren.

SQL-Aggregatfunktionen sind ein nützliches Werkzeug, insbesondere für die Erstellung von Berichten. Sie sind nicht schwer zu verstehen, vor allem wenn Sie etwas Erfahrung mit Excel oder ähnlichen Programmen haben. Wahrscheinlich haben Sie schon Aggregatfunktionen wie SUM oder AVERAGE in einer Tabellenkalkulation verwendet. Selbst wenn Sie sie nur gelegentlich verwenden, kann die Kenntnis von Aggregatfunktionen Ihnen helfen, Ihre Daten besser zu verstehen und effizienter zu arbeiten.

Alles, was ich in diesem Artikel behandle, wird in unserem Kurs Erstellen einfacher SQL-Berichte ausführlicher erklärt. Dort können Sie auch alle Funktionen üben, die Sie hier lernen.

Was sind SQL-Aggregatfunktionen?

In SQL führen Aggregatfunktionen eine Berechnung für mehrere Zeilen durch und geben einen Wert zurück. Sie werden häufig in der Anweisung GROUP BY verwendet, können aber auch ohne diese verwendet werden. Es gibt fünf Aggregatfunktionen in SQL:

  • COUNT()
  • SUM()
  • AVG()
  • MIN()
  • MAX()

Die GROUP BY-Anweisung werde ich hier nicht erläutern. Das ist auch nicht nötig, denn wir haben bereits einen ausgezeichneten Artikel darüber, wie GROUP BY funktioniert. Wenn Sie mit GROUP BY nicht vertraut sind, empfehle ich Ihnen, diesen Artikel zu lesen und dann hierher zurückzukommen.

Was tut jede Aggregatfunktion?

Die Namen der oben genannten Funktionen sind selbsterklärend, zumindest meiner Meinung nach. Vielleicht haben Sie schon herausgefunden, was sie tun, wenn Sie sie nur ansehen. Dennoch kann eine kurze Erklärung nicht schaden:

FunctionExplanationIgnores NULL values
COUNT()Counts the number of rows in a table
SUM()Calculates the sum of column values
AVG()Calculates the average column value
MIN()Returns the minimum value from a set of values
MAX()Returns the maximum value from a set of values

Die Verkaufstabelle

Ich werde nur eine Tabelle verwenden, um Ihnen zu zeigen, wie Aggregatfunktionen funktionieren. Sie heißt sales und besteht aus den folgenden Attributen:

  • id - Die ID des Verkäufers.
  • first_name - Der Vorname des Verkäufers.
  • last_name - Der Nachname des Verkäufers.
  • items_sold - Die Anzahl der verkauften Artikel.
  • product - Der Name des verkauften Produkts.
  • date - Das Datum des Verkaufs.

Hier sehen Sie einige Zeilen, die Ihnen zeigen, wie die Daten aussehen:

idfirst_namelast_nameitems_soldproductdate
1FrankCoyle42.00Product 12020-12-01
2FrankCoyle81.00Product 22020-12-01
3FrankCoyle14.00Product 32020-12-01
4NatashaHorvat69.00Product 12020-12-01
5NatashaHorvat44.00Product 22020-12-01

Beachten Sie, dass ein und derselbe Verkäufer in mehreren Zeilen erscheinen kann. Das Gleiche gilt für das Produkt und das Datum. Das bedeutet, dass ein Verkäufer mehrere Produkte an mehreren Daten verkaufen kann. Es bedeutet auch, dass ein und dasselbe Produkt an einem Datum von verschiedenen Verkäufern verkauft werden kann. Dies ist wichtig für die folgenden Beispiele.

Verwendung von COUNT()

Sie haben bereits gelernt, dass diese Funktion zum Zählen der Zeilen in einer Tabelle verwendet wird. Zählen wir sie also!

COUNT() ohne GROUP BY

Zählen wir zunächst die Anzahl der Zeilen in der sales Tabelle. Hier ist der Code:

SELECT COUNT (id) AS number_of_columns
FROM sales;

Dieser Code verwendet die Funktion COUNT(), um die Anzahl der Zeilen in der Spalte id zu zählen. Wenn Sie die Anzahl der Zeilen in dieser Spalte zählen, ist dies auch die Gesamtzahl der Zeilen in der Tabelle. Wenn Sie den Code ausführen, erhalten Sie die Ergebnisse in der Spalte number_of_columns. Es sind 27 Zeilen:

number_of_columns
27

Hoffentlich haben Sie keine Schwierigkeiten mit dieser einfachen SELECT-Anweisung. Falls doch, kann der Kurs SQL für Anfänger von Nutzen sein. Er vermittelt Ihnen die grundlegenden Prinzipien von Datenbanken, Aggregation und Abfragen auf eine oder mehrere Tabellen.

COUNT() mit GROUP BY

Ihre nächste Aufgabe besteht darin, die Anzahl der verschiedenen Produkte zu zählen, die von den einzelnen Verkäufern verkauft wurden. Überlegen Sie, wie die Daten in der Tabelle dargestellt werden sales. Wenn Sie das bedacht haben, sollte Ihr Code wie folgt aussehen:

SELECT	first_name,
		last_name,
		COUNT (DISTINCT product) AS number_of_products
FROM sales
GROUP BY first_name, last_name;

Die Abfrage wählt zunächst den Vornamen und den Nachnamen des Verkäufers aus. Dann wird die Funktion COUNT() verwendet, um die Anzahl der Produkte zu zählen, wobei das Ergebnis in der Spalte number_of_products angezeigt wird.

Beachten Sie, dass es eine DISTINCT Klausel gibt. Das bedeutet, dass der Code nur eindeutige Produkte zählt, d. h. ein bestimmtes Produkt wird nur gezählt, wenn es zum ersten Mal für einen bestimmten Verkäufer auftaucht. Die DISTINCT -Klausel ist in dieser Abfrage wichtig, da dasselbe Produkt mehrmals an verschiedenen Tagen erscheinen kann. Andernfalls würde die Funktion COUNT() ein Produkt jedes Mal zählen, wenn es in der Tabelle erscheint, was nicht das gewünschte Ergebnis ist.

Schließlich wird die Ausgabe des Codes nach den Spalten first_name und last_name gruppiert, weil ich das Ergebnis für jeden Verkäufer sehen möchte. Hier ist das Ergebnis:

first_namelast_namenumber_of_products
FrankCoyle3
NatashaHorvat3
YolandaMartinez3

Es gibt drei Verkäufer und jeder von ihnen verkauft drei verschiedene Produkte.

Die Funktion COUNT() ist insofern interessant, als dass sie NULL-Werte ignoriert. Aufgrund dieser Eigenschaft sollten Sie vorsichtig sein, wenn Sie entscheiden, was Sie zählen wollen und wie. In diesem Artikel werden die Feinheiten der Funktion COUNT() erörtert. Er kann Ihnen bei diesen Entscheidungen helfen.

Wenn Sie Ihre Kenntnisse der Anweisung GROUP BY vertiefen möchten, probieren Sie unseren Kurs Erstellen einfacher SQL-Berichte als Übungssatz für GROUP BY aus. In diesem Kurs wird GROUP BY im Detail erklärt, was hilfreich sein könnte.

SUMME() ohne GROUP BY

Nachdem Sie die Zeilen gezählt haben, lernen Sie nun, alle Werte in einer Tabelle zu summieren. Diesmal besteht Ihre Aufgabe darin, die Gesamtzahl der verkauften Artikel zu ermitteln. Haben Sie eine Idee, wie Sie das machen können? Überstürzen Sie nichts; lassen Sie sich Zeit, bevor Sie sich meine Lösung ansehen.

OK, ich vertraue darauf, dass Sie sich die Zeit genommen haben; hier ist der Code:

SELECT SUM(items_sold) AS total_items_sold
FROM sales;

Diese einfache Abfrage summiert die Spalte items_sold aus der Tabelle sales. Das Ergebnis wird in der Spalte total_items_sold angezeigt; hier ist es:

total_items_sold
1275.00

SUMME() mit GRUPPE BY

Da Sie nun mit der Funktion SUM() vertraut sind, können wir die Sache etwas komplizierter machen. Wie wäre es, wenn Sie alle glücklich machen und die Anzahl der verkauften Artikel nach Produkt berechnen? So geht's:

SELECT	product,
		SUM(items_sold) AS items_sold_per_product
FROM sales
GROUP BY product;

Dieser Code wählt die Spalte product aus der Tabelle aus sales. Dann summiert er die Anzahl der verkauften Artikel und zeigt das Ergebnis in der Spalte items_sold_per_product an. Da Ihre Aufgabe darin besteht, die Anzahl der Artikel pro Produkt anzuzeigen, sollten Sie das Ergebnis nach Produkt gruppieren. Voila, das Ergebnis lautet:

productitems_sold_per_product
Product 1442.00
Product 2639.00
Product 3194.00

Wenn Sie das Ergebnis überprüfen möchten, addieren Sie alle obigen Werte und Sie erhalten 1.275. Diese Summe ist genau das Ergebnis, das Sie im vorherigen Beispiel erhalten haben.

Ich möchte Ihnen nun zeigen, was die Funktion AVG() bewirkt.

AVG() ohne GROUP BY

Wie Sie bereits wissen, berechnet die Funktion AVG() den Durchschnittswert einer Gruppe von Werten. Um Ihnen zu zeigen, wie sie funktioniert, nehmen wir an, Sie müssen die durchschnittliche Anzahl der verkauften Artikel berechnen. Hier ist eine Abfrage, die Ihnen das richtige Ergebnis liefern wird:

SELECT AVG(items_sold) AS avg_number_of_items_sold
FROM sales;

Dieser Code ähnelt dem Beispiel der Funktion SUM(). Er verwendet nun die Funktion AVG(), um die Durchschnittswerte in der Spalte items_sold zu berechnen. Das Ergebnis des Codes wird in der Spalte avg_number_of_items_sold angezeigt.

Der kleine Code liefert eine kleine Tabelle:

avg_number_of_items_sold
47.222222

Seien Sie vorsichtig, wenn Sie AVG() für eine Spalte mit NULL Werten verwenden. Diese Funktion berücksichtigt nicht die Zeilen, die die Werte von NULL enthalten, so dass der Durchschnittswert anders ausfallen kann, als Sie erwarten. Lassen Sie mich Ihnen zeigen, was ich meine. Ich habe die Tabelle sales Tabelle geändert, um Ihnen zu zeigen, wie das funktioniert:

idfirst_namelast_nameitems_soldproductdate
1FrankCoyle42Product 12020-12-01
2FrankCoyle81Product 22020-12-01
3FrankCoyle14Product 32020-12-01
4NatashaHorvatNULLProduct 12020-12-01

Was denken Sie, wie hoch der Durchschnittswert von items_sold sein wird? Ist Ihre Vermutung, dass die Funktion AVG() den Wert NULL als Null behandeln würde? Etwa so:

AVG = (42+81+14+0)/4 = 34.25

Nö, Ihre Vermutung ist falsch! Das Ignorieren der NULL-Werte bedeutet, dass die Zeile so behandelt wird, als gäbe es sie gar nicht. Etwa so:

AVG = (42+81+14)/3 = 45.67

AVG() mit GROUP BY

Diesmal brauchen Sie einen Bericht, der die durchschnittlich verkauften Artikel nach Datum anzeigt. Wie würden Sie das mit der Funktion AVG() mit GROUP BY machen? Sie haben es wahrscheinlich selbst herausgefunden. Falls nicht, hier ist die Lösung:

SELECT	date,
		AVG(items_sold) AS avg_items_per_date
FROM sales
GROUP BY date;

Diese Abfrage wählt die Spalte Datum aus der Tabelle aus sales. Auch hier wird der Durchschnitt der verkauften Artikel berechnet, und das Ergebnis wird in der Spalte avg_items_per_date angezeigt. Sie möchten, dass das Ergebnis nach Datum angezeigt wird, also müssen Sie das Ergebnis nach der Spalte date gruppieren.

dateavg_items_per_date
2020-12-0147
2020-12-0259
2020-12-0335.666666

Drei Aggregatfunktionen erledigt, zwei fehlen noch. Schauen wir uns nun die Funktionen MIN() und MAX() an. Man kann sie fast als eine einzige Funktion betrachten.

MIN() und MAX() ohne GROUP BY

Die Funktionen MIN() und MAX() können als die Gegenpole einer Funktion betrachtet werden. Sie funktionieren auf die gleiche Weise, nur dass die eine Funktion den Mindest- und die andere den Höchstwert in einer Gruppe von Werten zurückgibt.

Um Ihnen zu zeigen, wie diese beiden Funktionen funktionieren, lassen Sie uns die minimale und maximale Anzahl der an einem Tag verkauften Artikel anzeigen. Wie würden Sie das tun? Da die Daten in der Tabelle sales auf Datumsebene sind, ist es ganz einfach:

SELECT	MIN(items_sold) AS min_daily_sale,
		MAX(items_sold) AS max_daily_sale
FROM sales;

Der Code verwendet zunächst die Funktion MIN() für die Spalte items_sold, um den kleinsten Wert zu ermitteln. Das Ergebnis wird in der Spalte min_daily_sale angezeigt. Die Funktion MAX() findet den größten Wert, wobei das Ergebnis in der Spalte max_daily_sale angezeigt wird. Führen Sie den Code aus und Sie erhalten das folgende Ergebnis:

min_daily_salemax_daily_sale
7.00122.00

MIN() und MAX() mit GROUP BY

Im vorigen Beispiel erhalten wir nur die kleinsten und größten täglichen Verkaufswerte. Darüber hinaus wissen wir nichts. Um diesen Bericht aufzupeppen, können wir das Minimum und Maximum der verkauften Artikel nach Verkäufer und Produkt anzeigen. Sind Sie bereit, die Lösung zu sehen? Hier ist sie:

SELECT	first_name,
		last_name,
		product,
		MIN(items_sold) AS min_sold_per_product,
		MAX(items_sold) AS max_sold_per_product
FROM sales
GROUP BY first_name, last_name, product;

Ihre letzte Abfrage für heute verdient es, die längste zu sein. Lassen Sie sich davon nicht abschrecken, es gibt nichts, was Sie nicht schon wissen. Die Abfrage wählt die Spalten first_name, last_name, und das Produkt aus der Tabelle sales aus. Dann kommt die Funktion MIN(); mit ihr wird die kleinste Anzahl der verkauften Artikel pro Produkt berechnet; das Ergebnis wird in der Spalte min_sold_per_product angezeigt. Dann folgt die größte Anzahl der verkauften Artikel pro Produkt in der Spalte max_sold_per_product. Schließlich muss das Ergebnis nach dem Vor- und Nachnamen des Verkäufers und dem Namen des Produkts gruppiert werden. Hier ist der Bericht:

first_namelast_nameproductmin_sold_per_productmax_sold_per_product
FrankCoyleProduct 121.0066.00
FrankCoyleProduct 267.0099.00
FrankCoyleProduct 314.0025.00
NatashaHorvatProduct 112.0069.00
NatashaHorvatProduct 244.00122.00
NatashaHorvatProduct 324.0031.00
YolandaMartinezProduct 128.00112.00
YolandaMartinezProduct 230.0067.00
YolandaMartinezProduct 37.0033.00

Wie ich versprochen habe, ist dies Ihre letzte Aufgabe! Das Beste, was Sie jetzt tun können, ist, die SQL-Aggregatfunktionen selbst zu üben. Versuchen Sie vielleicht unsere SQL-Übungssatz, die einen schönen Abschnitt über GROUP BY enthält. Oder werfen Sie einfach einen Blick auf einen anderen Artikel, der fünf Beispiele für GROUP BY enthält; vielleicht ist das genau das, was Sie brauchen.

Finden Sie SQL-Aggregatfunktionen nützlich?

Die Lektüre dieses Artikels ist nicht alles, was Sie brauchen, um die Aggregatfunktionen zu beherrschen. Ich habe jedoch versucht, Ihnen einen praktischen Überblick über die Aggregatfunktionen von SQL zu geben - was sie tun und wie sie es tun. Ich habe Ihnen auch gezeigt, wie Sie Aggregatfunktionen mit und ohne GROUP BY verwenden können. Jetzt ist es vielleicht an der Zeit, sich näher mit GROUP BY zu beschäftigen, wenn man bedenkt, wie nützlich GROUP BY und seine Erweiterungen in der Arbeitswelt sein können.

Teilen Sie Ihre Erfahrungen mit den SQL-Aggregatfunktionen im Kommentarbereich mit.