Zum Inhalt springen
SemaTrain

SQL-WISSEN · Auswertung

Aggregation, GROUP BY und HAVING

Wie Aggregatfunktionen mehrere Zeilen zu Kennzahlen verdichten, GROUP BY Gruppen bildet und HAVING Gruppen nach der Aggregation filtert.

Kurzdefinition

Aggregatfunktionen wie COUNT, SUM und AVG verdichten mehrere Eingabezeilen zu Kennzahlen. GROUP BY teilt die Eingabemenge in Gruppen, für die diese Kennzahlen getrennt berechnet werden.

Grundmuster

WHERE filtert Eingabezeilen vor der Gruppierung. HAVING filtert Gruppen anhand aggregierter oder gruppenbezogener Bedingungen.

Umsatz pro Kunde
SELECT kunde_id, SUM(betrag) AS umsatz
FROM bestellung
WHERE status = 'bezahlt'
GROUP BY kunde_id
HAVING SUM(betrag) >= 1000
ORDER BY umsatz DESC;

COUNT ist nicht immer dasselbe

COUNT(*) zählt die Zeilen einer Gruppe. COUNT(spalte) zählt nur die nicht-NULL-Werte der angegebenen Spalte. Deshalb sollte die gewählte Form zur fachlichen Frage passen.

Kritisch unterscheiden

  • WHERE filtert Zeilen; HAVING filtert Gruppen.
  • COUNT(*) und COUNT(spalte) beantworten unterschiedliche Fragen, wenn NULL vorkommt.
  • Aggregation verändert die Granularität des Ergebnisses.

Typische Fehler und Missverständnisse

  • Nicht aggregierte Ausgabespalten ohne klare Gruppierungslogik auszuwählen.
  • HAVING als allgemeinen Ersatz für WHERE zu verwenden.
  • AVG oder SUM ohne Prüfung der fachlichen Einheit und Datengrundlage zu interpretieren.

Praxisfall

Umsatzschwelle pro Kunde

Aus bezahlten Bestellungen sollen nur Kunden mit mindestens 1.000 Euro Gesamtumsatz erscheinen.

  • Welche Bedingung gehört in WHERE?
  • Was ist die Gruppierung?
  • Welche Bedingung gehört in HAVING?

Selbsttest

Verständnis prüfen

1. Wann wird HAVING typischerweise benötigt?

Antwortmöglichkeiten zu Frage 1
Antwort und Begründung anzeigen

HAVING formuliert Bedingungen auf Gruppen beziehungsweise aggregierten Ergebnissen.

2. Warum kann COUNT(spalte) von COUNT(*) abweichen?

Antwortmöglichkeiten zu Frage 2
Antwort und Begründung anzeigen

COUNT(*) zählt Zeilen, während COUNT(spalte) nur nicht-NULL-Werte der angegebenen Spalte zählt.

Transfer

Auf die eigene Praxis übertragen

Formulieren Sie für eine Kennzahl aus Ihrem Arbeitsalltag zuerst die fachliche Granularität: pro Kunde, pro Monat, pro Produkt oder insgesamt. Leiten Sie erst danach GROUP BY und Aggregatfunktion ab.

Weiterlernen

Verknüpfungen

Quellen, Prüfstand und Grenzen

Fachliche Nachvollziehbarkeit

Quellen geprüft
2026-09-18
Versionsrahmen
Gemeinsamer SQL-Kern mit explizit gekennzeichneten Varianten für SQLite 3.53.4, PostgreSQL 18 und MySQL 8.4 LTS.
Aussagebereich
COUNT, SUM, AVG, GROUP BY und HAVING werden im gemeinsamen Kern behandelt; produktspezifische Erweiterungen bleiben gekennzeichnet.
Originalität
Faktenbasis aus Primärquellen; Einordnung, Struktur, Beispiele, Selbsttests und Transfer sind eigenständige SemaTrain-Inhalte.

Grenzen

  • Produktspezifische Syntax und Verhalten können sich zwischen SQLite, PostgreSQL und MySQL unterscheiden.
  • Versionsabhängige Aussagen gelten für den im Quellenbereich ausgewiesenen Prüfstand.

Primärquellen

Hersteller-Primärdokumentation

MySQL 8.4 Aggregate Functions

MySQL

Version: MySQL 8.4 LTS

Bezug: Aggregate Functions, GROUP BY und MySQL-spezifische Regeln.