GROUP BY ·
COUNT, SUM, AVG ·
HAVING ·
Mehrfach-Gruppierung ·
WHERE vs HAVING ·
Praxis-Beispiele
Mit GROUP BY fassen Sie Datensätze zu Gruppen zusammen und wenden Aggregatfunktionen an. HAVING filtert diese Gruppen – ähnlich wie WHERE, aber für Aggregationen.
GROUP BY fasst Zeilen mit gleichen Werten in den angegebenen Spalten zu Gruppen zusammen. Zusammen mit Aggregatfunktionen wie COUNT, SUM, AVG, MIN, MAX werden gruppierte Statistiken berechnet.
| Regel | Beschreibung |
|---|---|
| SELECT-Spalten | Nur GROUP BY-Spalten oder Aggregatfunktionen dürfen im SELECT stehen |
| Reihenfolge | GROUP BY steht nach WHERE und vor ORDER BY |
| NULL-Werte | NULL-Werte werden zu einer Gruppe zusammengefasst |
| Mehrere Spalten | Gruppierung nach Kombination mehrerer Spalten möglich |
Aggregatfunktionen berechnen Werte über eine gesamte Gruppe oder Tabelle. Sie werden oft mit GROUP BY verwendet, können aber auch ohne GROUP BY auf die gesamte Tabelle angewendet werden.
| Funktion | Beschreibung | Beispiel |
|---|---|---|
| COUNT(*) | Zählt alle Zeilen (inkl. NULL) | COUNT(*) → 150 |
| COUNT(spalte) | Zählt nicht-NULL-Werte | COUNT(email) → 120 |
| COUNT(DISTINCT spalte) | Zählt eindeutige nicht-NULL-Werte | COUNT(DISTINCT kategorie) → 5 |
| SUM(spalte) | Summiert Werte (nur numerisch) | SUM(preis) → 4520.50 |
| AVG(spalte) | Durchschnitt (nur numerisch) | AVG(preis) → 90.41 |
| MIN(spalte) | Kleinster Wert | MIN(preis) → 4.99 |
| MAX(spalte) | Größter Wert | MAX(preis) → 999.99 |
COUNT(DISTINCT spalte) ist nützlich, um die Anzahl unterschiedlicher Werte in einer Gruppe zu zählen – z.B. wie viele verschiedene Kategorien es gibt.
HAVING filtert Gruppen nach der Aggregation – ähnlich wie WHERE vor der Aggregation. HAVING wird nach GROUP BY ausgeführt und kann nur Aggregatfunktionen und GROUP BY-Spalten verwenden.
| Merkmal | WHERE | HAVING |
|---|---|---|
| Zeitpunkt | Vor GROUP BY (filtert Zeilen) | Nach GROUP BY (filtert Gruppen) |
| Aggregatfunktionen | ❌ Nicht erlaubt | ✅ Erlaubt |
| Spalten | Alle Tabellenspalten | Nur GROUP BY-Spalten + Aggregate |
| Performance | Filtert vor Aggregation (schneller) | Filtert nach Aggregation |
| Verwendung | Einzelne Zeilen filtern | Gruppen filtern |
Mehrfach-Gruppierung erstellt Gruppen für jede eindeutige Kombination der angegebenen Spalten. So erhalten Sie detailliertere Aggregationen.
GROUP BY kategorie, hersteller erstellt feinere Gruppen als GROUP BY kategorie.
WHERE und HAVING werden oft verwechselt. WHERE filtert Zeilen vor der Gruppierung, HAVING filtert Gruppen nach der Gruppierung. Die richtige Wahl verbessert die Performance und die Korrektheit der Abfrage.
Praxis-Beispiele zeigen die Kombination von GROUP BY und HAVING für typische Analyseaufgaben – von Kundenanalysen über Umsatzberichte bis zu Auswertungen von Bestellmustern.
ROW_NUMBER(), RANK()) kombinieren – das ermöglicht Ranglisten innerhalb von Gruppen.
GROUP BY
COUNT
HAVING
Mehrfach
WHERE
Analysen
SELECT kategorie, COUNT(*) FROM produkte GROUP BY kategorie HAVING COUNT(*) > 5;