24th Nov 2022 10 Leseminuten Ein Überblick über Aggregatfunktionen in SQL Tihomir Babic Aggregatefunktionen group by Inhaltsverzeichnis Was sind SQL-Aggregatfunktionen? Was tut jede Aggregatfunktion? Die Verkaufstabelle Verwendung von COUNT() COUNT() ohne GROUP BY COUNT() mit GROUP BY SUMME() ohne GROUP BY SUMME() mit GRUPPE BY AVG() ohne GROUP BY AVG() mit GROUP BY MIN() und MAX() ohne GROUP BY MIN() und MAX() mit GROUP BY Finden Sie SQL-Aggregatfunktionen nützlich? 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. Tags: Aggregatefunktionen group by