TOP

SQL-Lektion 8. Datengruppierung (GROUP BY)

Durch die Datengruppierung können Sie alle Daten in logische Sätze unterteilen, wodurch statistische Berechnungen in jeder Gruppe separat durchgeführt werden können.


1. Gruppen erstellen (GROUP BY)

Gruppen werden mit der Anweisung GROUP BY des Operators SELECT erstellt. Betrachten wir ein Beispiel.

Run SQLSELECT Product, SUM(Quantity) AS Product_num 
FROM Sumproduct 
GROUP BY Product

Mit dieser Anfrage haben wir Informationen über die Anzahl der pro Monat verkauften Produkte extrahiert. Der Operator SELECT befiehlt die Ausgabe von zwei Spalten Product – der Name des Produkts und Product_num – das berechnete Feld, das wir erstellt haben, um die Menge der verkauften Produkte anzuzeigen (Feldformel SUM(Quantity)). Die GROUP BY-Klausel weist das DBMS an, Daten nach der Produktspalte zu gruppieren.

Es ist auch erwähnenswert, dass GROUP BY nach der WHERE-Klausel und vor ORDER BY stehen muss.

2. Gruppen filtern (HAVING)

So wie wir Zeilen in einer Tabelle gefiltert haben, können wir nach gruppierten Daten filtern. Dafür gibt es in SQL den Operator HAVING. Nehmen wir das vorherige Beispiel und fügen die Gruppenfilterung hinzu.

Run SQLSELECT Product, SUM(Quantity) AS Product_num 
FROM Sumproduct 
GROUP BY Product 
HAVING SUM(Quantity) > 4000

Wir sehen, dass das DBMS nach der Berechnung der Anzahl der verkauften Waren für jedes Produkt diejenigen Produkte „abgeschnitten“ hat, von denen weniger als 4.000 Einheiten verkauft wurden.

Wie Sie sehen können, ist der Operator HAVING dem Operator WHERE sehr ähnlich, es gibt jedoch einen wesentlichen Unterschied zwischen ihnen: WHERE filtert Daten, bevor sie gruppiert werden, und HAVING filtert nach der Gruppierung. Daher werden die Zeilen, die durch die WHERE-Klausel entfernt wurden, nicht in die Gruppe aufgenommen. Daher können die Operatoren WHERE und HAVING im selben Satz verwendet werden. Betrachten Sie ein Beispiel:

Run SQLSELECT Product, SUM(Quantity) AS Product_num 
FROM Sumproduct 
WHERE Product <> 'Skis Long' 
GROUP BY Product 
HAVING SUM(Quantity) > 4000

Wir haben den Operator WHERE zum vorherigen Beispiel hinzugefügt, in dem wir das Produkt „Skis Long“ angegeben haben, was sich wiederum auf die Gruppierung durch den Operator HAVING auswirkte. Daraus lässt sich erkennen, dass das Produkt „Ski Lang“ es nicht in die Liste der Gruppen mit mehr als 4.000 verkauften Produkten geschafft hat.

3. Gruppieren und Sortieren

Wie bei der normalen Datenerfassung können wir die Gruppen nach der Gruppierung mit dem Operator HAVING sortieren. Hierzu können wir den bereits bekannten Operator ORDER BY verwenden. In dieser Situation ähnelt die Anwendung den vorherigen Beispielen. Beispiel:

Run SQLSELECT Product, SUM(Quantity) AS Product_num 
FROM Sumproduct 
GROUP BY Product 
HAVING SUM(Quantity) > 3000
ORDER BY SUM(Quantity)

oder geben Sie einfach die Feldnummer in der Reihenfolge an, in der wir sortieren möchten:

Run SQLSELECT Product, SUM(Quantity) AS Product_num 
FROM Sumproduct 
GROUP BY Product 
HAVING SUM(Quantity) > 3000
ORDER BY 2

Wir sehen, dass wir zum Sortieren der Zusammenfassungsergebnisse lediglich die Klausel mit ORDER BY nach dem Operator HAVING schreiben müssen.

MS Access unterstützt das Sortieren von Gruppen nach Spaltenaliasen nicht, das heißt, in unserem Beispiel können wir zum Sortieren der Werte nicht ORDER BY Product_num am Ende der Abfrage schreiben.