Klausur-Tricks
Trick 1 — Reihenfolge der Klauseln auswendig:
SELECT
FROM
WHERE -- vor GROUP BY (Zeilen)
GROUP BY
HAVING -- nach GROUP BY (Aggregate)
ORDER BY
Trick 2 — SELECT-Regel: nur GROUP BY-Spalten ODER Aggregate. Klausur prüft das gerne mit Trickfragen.
Trick 3 — COUNT(*) vs COUNT(spalte):
- COUNT(*) = alle Zeilen
- COUNT(email) = Zeilen mit nicht-NULL email
- COUNT(DISTINCT kunde) = unterschiedliche Kunden
Trick 4 — AVG bei NULLs: ignoriert NULLs. AVG(note) über 10 Studis wo 2 keine Note haben → Mittelwert über 8 Werte.
Trick 5 — HAVING ohne GROUP BY: technisch erlaubt, dann gilt die ganze Tabelle als eine Gruppe. Selten gebraucht.
Trick 6 — ORDER BY mit Aggregat:
SELECT kunde, SUM(betrag)
FROM verkaeufe
GROUP BY kunde
ORDER BY SUM(betrag) DESC; -- Top-Kunden zuerst
Trick 7 — DISTINCT vs GROUP BY: für reines "unterschiedliche Werte zeigen" beide identisch:
SELECT DISTINCT kategorie FROM verkaeufe;
SELECT kategorie FROM verkaeufe GROUP BY kategorie;
-- gleiche Output
GROUP BY ist mächtiger weil Aggregate dazukommen können.
Trick 8 — Alias im SELECT, nicht in HAVING (manche DBs):
SELECT kunde, SUM(betrag) AS total
FROM verkaeufe
GROUP BY kunde
HAVING total > 1000; -- in PostgreSQL OK, in manchen DBs nicht
Sicherer:
HAVING SUM(betrag) > 1000;
Trick 9 — Leere Tabelle: COUNT → 0, SUM → 0 (oder NULL je nach DB), AVG → NULL.
Trick 10 — GROUPING SETS / ROLLUP / CUBE: erweiterte Gruppierungen für Reporting (Master-Stoff). Erstmal ignorieren.
Wo brauchst du GROUP BY?
- Reports / Dashboards: Umsatz pro Monat, User pro Region
- Statistiken: Durchschnittsnote pro Klausur, Anzahl Bestellungen pro Kunde
- Data Warehouses: jedes BI-Tool macht GROUP BY im Hintergrund
- Web-Analytics: Pageviews pro URL, Sessions pro Browser
- Logs analysieren: Fehler pro Stunde, Status-Codes pro Endpoint
Faustregel: wenn die Frage "wieviel/wieviele/durchschnittlich pro X" lautet → GROUP BY.