Zurück zur Artikelliste Artikel
6 Leseminuten

GROUP BY in SQL verwenden

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!