23rd Jun 2022 6 Leseminuten GROUP BY in SQL verwenden Zahin Rahman GROUP BY Inhaltsverzeichnis GROUP BY-Syntax GROUP BY einer einzelnen Spalte Gruppierung mit Aggregatfunktionen MAX(), MIN(), AVG(), SUM() GROUP BY Mehrere Spalten mit COUNT() Beherrschung von SQL GROUP BY Nachdem Sie nun die wichtigsten SQL-Befehle kennen, können Sie Ihre Abfragen mit der GROUP BY-Klausel und Aggregatfunktionen erweitern. GROUP BY GROUP BY ist eine SQL-Klausel, die Daten auf der Grundlage eines gemeinsamen Wertes (oder mehrerer Werte) in Gruppen zusammenfasst. Sie wird häufig verwendet, um zusammenfassende Informationen für große Datensätze zu erhalten und um grundlegende aggregierte Statistiken zu berechnen. Sobald Sie die SQL für Anfänger wie SELECT, WHERE und JOIN beherrschen, kann Ihnen die Beherrschung der Klausel GROUP BY helfen, Ihr SQL-Wissen in realen Business Intelligence-Szenarien umzusetzen. SQL GROUP BY wird am häufigsten in Kombination mit Aggregatfunktionen wie COUNT(), MAX(), MIN(), SUM() und AVG() verwendet. Sie gruppiert die Ergebnismenge nach einer oder mehreren Spalten und erstellt im Wesentlichen zusammenfassende Zeilen für jede Gruppe. Diese Gruppen basieren in der Regel auf kategorialen und nicht auf kontinuierlichen Werten. Wenn Sie z. B. einen Datensatz mit globalen Kunden für Ihr Unternehmen verwenden, können Sie die GROUP BY-Klausel verwenden, um Informationen wie die "Gesamtzahl der Kunden pro Land" oder den "Gesamtumsatz pro Kunde" zusammenzufassen. GROUP BY-Syntax Nachdem wir nun wissen, was die GROUP BY Klausel ist, wollen wir uns die Syntax einer einfachen GROUP BY Abfrage ansehen. SELECT column_name(s) FROM table_name WHERE [condition] GROUP BY column_name1, column_name2 HAVING [condition] ORDER BY column_name Hier: SELECT ist die Standard-SQL-Abfrage SELECT. GROUP BY column_name1 führt die Gruppierung auf der Grundlage der Werte in column_name1 durch. column_name2 wird verwendet, wenn die Gruppierung nach mehr als einer Spalte vorgenommen wird; Sie können nach einer beliebigen Anzahl von Spalten gruppieren. Dies ist optional. HAVING [condition] und WHERE [condition] sind ebenfalls optional; beide werden verwendet, um die von der GROUP BY -Klausel betroffenen Zeilen einzuschränken. Der Hauptunterschied besteht darin, dass WHERE die Zeilen vor der Gruppierung filtert und HAVING die Gruppen selbst filtert, sobald sie gebildet sind. Wichtig: WHERE muss der GROUP BY -Klausel vorausgehen und HAVING muss ihr folgen. ORDER BY [condition] wird nach GROUP BY verwendet, um die Daten nach einer bestimmten column_name zu sortieren oder zu ordnen. Auf den ersten Blick scheinen GROUP BY und ORDER BY das Gleiche zu tun - die Daten zu sortieren. Aber damit enden die Gemeinsamkeiten auch schon. Wie der Name schon sagt, sortiert ORDER BY einfach den gesamten Datensatz in einer bestimmten Reihenfolge, während GROUP BY die Daten als aggregierte Ausgabe gruppiert. Unser früherer Artikel Der Unterschied zwischen GROUP BY und ORDER BY in einfachen Worten erklärt dies ausführlicher; sehen Sie ihn sich an, wenn Sie eine Auffrischung benötigen. Schauen wir uns nun an, wie die GROUP BY Klausel mit echten Abfragen funktioniert. GROUP BY einer einzelnen Spalte Um die Wirkung der GROUP BY Klausel zu verstehen, führen wir eine einfache Abfrage in der Tabelle Orders aus, die 196 einzelne Bestellungen erfasst hat. Unten sehen Sie die ersten fünf Einträge in der Tabelle: OrderIDCustomerIDEmployeeIDOrderDateShipperID 102489051996-07-043 102498161996-07-051 102503441996-07-082 102518431996-07-081 102527641996-07-092 Mit Hilfe der Tabelle Orders Tabelle können wir herausfinden, wie viele einzelne Kunden eine Bestellung aufgegeben haben. Hier ist die Abfrage: SELECT CustomerID FROM Orders GROUP BY CustomerID ERGEBNIS Number of Records: 74 CustomerID 2 3 4 5 7 Dies ist ein Beispiel für eine einfache GROUP BY Klausel für eine einzelne Spalte (CustomerID); die Ausgabe ordnet alle Zeilen mit demselben Wert für die Spalte CustomerID in dieselbe Gruppe ein. Sie gibt auch die Anzahl der eindeutigen Kunden zurück, die eine Bestellung aufgegeben haben (74). Im Wesentlichen verhält sich eine GROUP BY -Klausel ohne Aggregatfunktion ähnlich wie eine DISTINCT -Klausel: Sie findet die eindeutigen Werte in einer Spalte. Die Gruppierung kann auch nach mehreren Spalten erfolgen. Dies ist am nützlichsten, wenn sie mit Aggregatfunktionen verwendet wird. Gruppierung mit Aggregatfunktionen Die praktische Anwendung des SQL-Befehls GROUP BY besteht darin, statistische Parameter für Datengruppen zusammenzufassen; dies wird normalerweise mit Aggregatfunktionen erreicht. Wir werden jetzt einige Beispiele untersuchen, indem wir die Orders Tabellen und der OrderDetails Tabelle, von der im Folgenden ein Beispiel gezeigt wird: OrderDetailIDOrderIDProductIDQuantity 1102481112 2102484210 310248725 410249149 5102495140 MAX(), MIN(), AVG(), SUM() GROUP BY eignet sich hervorragend, um die statistischen Parameter einzelner Kategorien in Ihrem Datensatz zusammenzufassen. Versuchen wir zum Beispiel, die maximale, minimale und durchschnittliche Menge jedes ProductID pro Bestellung und die Gesamtzahl jedes bestellten Produkts zu ermitteln. Wir verwenden die OrderDetails und ordnen die Ergebnisse in absteigender Reihenfolge nach der Summe der bestellten Mengen für jedes Produkt. Dies gibt Aufschluss über die beliebtesten ProductIDs. Hier ist die Abfrage: SELECT ProductID, MAX(Quantity), Min(Quantity), AVG(Quantity), SUM (Quantity) FROM OrderDetails GROUP BY ProductID Order By SUM(Quantity) DESC ERGEBNIS Number of Records: 77 ProductIDMAX(Quantity)Min(Quantity)AVG(Quantity)SUM (Quantity) 3170432.714285714285715458 6080635.833333333333336430 35100441369 5970624.714285714285715346 260731341 In der nachstehenden Tabelle wird aufgeschlüsselt, wie einige dieser Aggregatwerte für die ProductID Werte 2 und 31 berechnet werden. Die Klausel GROUP BY fasst zunächst die Zeilen für ProductID 2 zusammen und berechnet dann die Werte AVG() und MAX() für die gesamte Gruppe. Dasselbe wird für jede ProductID für jede der Aggregatfunktionen in der Abfrage durchgeführt. ProductIDQuantityAverage (?Quantity/# of ProductID)Max (Quantity) 2603160 250 245 240 235 ………… 317032.71470 3160 3156 3142 3140 ………… Wie Sie sehen, ist der Befehl GROUP BY ein äußerst nützliches Werkzeug, um statistische Zusammenfassungen für eine beliebige Klasse von Variablen zu finden. GROUP BY Mehrere Spalten mit COUNT() Wie bereits erwähnt, können Sie mehrere Spalten in der GROUP BY verwenden. Mit anderen Worten, Sie fassen alle Zeilen mit den gleichen Werten in column_name1 und column_name2 in einer Gruppe zusammen. Betrachten wir ein Beispiel, bei dem wir zählen möchten, wie oft jeder Mitarbeiter jeden Versandservice genutzt hat. Auch hier verwenden wir die Orders Tabelle. SELECT EmployeeID, ShipperID, COUNT(*) FROM Orders Group BY EmployeeID, ShipperID Order BY ShipperID, Count(*) DESC ERGEBNIS Number of Records: 26 EmployeeIDShipperIDCOUNT(*) 4112 118 217 317 617 …….…….……. Diese Abfrage könnte z. B. verwendet werden, um von den Mitarbeitern, die diesen Service in Anspruch genommen haben, Rückmeldungen über den Kundendienst der Versender zu erhalten. Wie wir oben sehen können, gibt es 26 eindeutige Interaktionspaare zwischen Arbeitnehmern und Versendern! Wie funktioniert die Gruppierung nach zwei Spalten hinter den Kulissen? Zeilen mit denselben EmployeeID und ShipperID werden zu einer Gruppe zusammengefasst. Die Größe dieser Gruppen (d. h. die Anzahl der Datensätze in der Gruppe) wird berechnet, wie Sie unten sehen können: EmployeeIDShipperIDCount 11 11 1112 11 11 …………. 41 41 418 41 41 …………. Der Befehl GROUP BY ist ebenfalls ein leistungsstarkes Werkzeug, das mit den Klauseln SQL HAVING und WHERE kombiniert werden kann, um zusätzliche Bedingungen für die zurückgegebenen Ergebnisse zu definieren. Beachten Sie, dass es bestimmte Feinheiten gibt, wenn GROUP BY mit Spalten verwendet wird, die NULL Werte haben. In unserem früheren Artikel über häufige GROUP BY Fehler finden Sie einige zusätzliche Details. Beherrschung von SQL GROUP BY Unnötig zu sagen, dass Sie diesen Befehl nur durch Übung beherrschen werden! Üben Sie am besten an realen Datensätzen, die Sie visualisieren und auf die geschäftlichen Anforderungen beziehen können. Der SQL für Anfänger Kurs enthält eine umfassende Reihe von interaktiven Übungen. Sie werden lernen, wie man Zeilen gruppiert und Statistiken mit Aggregatfunktionen auf praktischen Datensätzen berechnet. Probieren Sie es aus, und viel Erfolg! Tags: GROUP BY