Auswerten mit GROUP BY, COUNT und HAVING – Daten gruppieren und filtern
Wie viele Einträge pro Kategorie? Welche Kunden haben mehr als drei Bestellungen? Genau dafür sind GROUP BY und HAVING da. Ich zeige dir an einem kleinen Beispiel, wie du aus rohen Zeilen eine echte Auswertung machst.
Sobald du in einer Tabelle etwas zählen oder summieren willst, brauchst du GROUP BY. Statt jede Zeile einzeln anzusehen, fasst SQL sie in Gruppen zusammen und rechnet pro Gruppe. Ich erkläre es an einer Snippet-Tabelle – passend, weil ich sowas gerade selbst für eine Statistik-Auswertung nutze.
Zählen pro Kategorie
SELECT language, COUNT(*) AS anzahl
FROM snippets
GROUP BY language
ORDER BY anzahl DESC;GROUP BY language bildet je Sprache eine Gruppe, COUNT(*) zählt die Zeilen darin. ORDER BY anzahl DESC sortiert die größte Kategorie nach oben. Ergebnis: eine saubere „Sprache → Anzahl"-Liste.
Auch Summen gehen so
SELECT language, SUM(views) AS aufrufe
FROM snippets
GROUP BY language
ORDER BY aufrufe DESC;Statt zu zählen, summierst du hier die Aufrufe pro Sprache – so siehst du, welche Kategorie am meisten gelesen wird.
Gruppen filtern: HAVING statt WHERE
Ein häufiger Stolperstein: WHERE filtert einzelne Zeilen, bevor gruppiert wird. Willst du aber nach dem Ergebnis der Gruppe filtern (z. B. „nur Sprachen mit mehr als 5 Snippets"), brauchst du HAVING:
SELECT language, COUNT(*) AS anzahl
FROM snippets
GROUP BY language
HAVING COUNT(*) > 5
ORDER BY anzahl DESC;Merksatz: WHERE filtert Zeilen, HAVING filtert Gruppen. Beides lässt sich kombinieren – erst WHERE (z. B. nur veröffentlichte), dann GROUP BY, dann HAVING.
Genau solche Auswertungen baue ich regelmäßig in Admin-Bereiche ein, damit man auf einen Blick sieht, was läuft. Brauchst du sowas für dein Projekt? Schreib mir über bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
STRICT-Tabellen in SQLite: wenn „drei“ nicht mehr in eine INTEGER-Spalte passt
SQLite nimmt in einer INTEGER-Spalte klaglos den Text „drei“ entgegen und speichert ihn als Text. Das ist kein Fehler, sondern Absicht – und trotzdem der Grund für Auswertungen, die still falsche Zahlen liefern. Ein Schlüsselwort schaltet es ab.
Wie viel mehr als gestern? Differenz zur Vorzeile mit LAG() in SQL
„Wie viele Besucher heute im Vergleich zu gestern?" – der Reflex ist ein Self-Join auf die Vorzeile. Mit der Fensterfunktion LAG() bekommst du den Wert der vorherigen Zeile direkt daneben, ohne die Tabelle ein zweites Mal anzufassen.
Vergleich zur Vorzeile mit LAG() – wie stark hat sich ein Wert verändert
„Wie viele Besucher mehr als gestern?" ist in SQL erstaunlich fummelig, wenn man es mit einem Self-Join löst. Mit der Fensterfunktion LAG() greifst du direkt auf die vorherige Zeile zu – und rechnest die Differenz in einer einzigen, lesbaren Abfrage.