GROUP BY
Aggregatfunktionen
GROUP BY fasst Zeilen mit gleichem Wert zu Gruppen zusammen. In Kombination mit Aggregatfunktionen berechnest du dann eine Kennzahl pro Gruppe – z. B. Umsatz pro Stadt oder Anzahl Bestellungen pro Kunde. Das ist das Herzstück jeder Datenauswertung.
Syntax
SELECT Gruppenspalte, Aggregatfunktion(...) FROM Tabelle GROUP BY Gruppenspalte;
Beispiel: Anzahl Kunden pro Stadt
SELECT Stadt, COUNT(*) AS Anzahl FROM Kunden GROUP BY Stadt;
| Stadt | Anzahl |
|---|---|
| Berlin | 2 |
| Köln | 1 |
| Hamburg | 2 |
Aus fünf Kundenzeilen werden drei Gruppen – eine je vorkommender Stadt.
Beispiel: nach mehreren Spalten gruppieren
Du darfst nach mehreren Spalten gleichzeitig gruppieren. Dann bildet jede Kombination eine Gruppe:
SELECT Land, Stadt, SUM(Umsatz) AS Umsatz FROM Kunden GROUP BY Land, Stadt;
Reihenfolge der Klauseln
Die Bestandteile einer Abfrage haben eine feste Reihenfolge:
SELECT ... FROM ... WHERE ... -- filtert Einzelzeilen VOR der Gruppierung GROUP BY ... HAVING ... -- filtert Gruppen NACH der Gruppierung ORDER BY ...;
Stolperfalle
Jede Spalte im SELECT, die nicht in einer Aggregatfunktion steckt, muss auch im GROUP BY stehen. Schreibst du SELECT Stadt, Name, COUNT(*) … GROUP BY Stadt, ist unklar, welcher der vielen Namen pro Stadt gezeigt werden soll. Strenge Datenbanken (PostgreSQL, SQL Server, MySQL mit ONLY_FULL_GROUP_BY) werfen hier einen Fehler. Älteres MySQL würde stillschweigend irgendeinen Namen liefern – ein häufiger, schwer auffindbarer Bug.