6. Aggregationen

SQL lernen

In diesem Kapitel lernst du, wie du Daten nicht nur abrufen, sondern auch zusammenfassend analysieren kannst. Oft reicht es nämlich nicht aus, einzelne Zeilen einer Tabelle zu betrachten – viel spannender ist es, Informationen aus vielen Datensätzen zu verdichten. Genau dafür stehen dir in SQL sogenannte Aggregationsfunktionen zur Verfügung.

Mit Aggregationsfunktionen kannst du beispielsweise die Summe aller Bestellungen berechnen, den höchsten oder niedrigsten Wert in einer Spalte finden oder den Durchschnittswert ermitteln. Häufig verwendete Funktionen sind COUNT(), SUM(), AVG(), MIN() und MAX(). Diese Funktionen arbeiten über mehrere Zeilen hinweg und liefern dir so verdichtete Kennzahlen.

6.1 Aggregationsfunktionen

Aggregationsfunktionen in SQL ermöglichen es dir, Daten über mehrere Zeilen hinweg zusammenzufassen und aussagekräftige Kennzahlen zu berechnen. Sie liefern immer einen einzelnen Wert, der die betrachtete Datenmenge beschreibt. Mit diesen Funktionen kannst du z. B. herausfinden, wie viele Benutzer in deiner Datenbank registriert sind, wie hoch der Gesamtumsatz eines Zeitraums ist oder welche Extremwerte in deinen Daten vorhanden sind.

Beispieltabelle

Wir verwenden für alle Beispiele die folgende Tabelle bestellungen:

idbenutzer_idbetragstadt
1150Berlin
2230Hamburg
3120Berlin
43NULLBerlin
5470München

COUNT

Die COUNT-Funktion zählt die Anzahl der Zeilen, die einer Bedingung entsprechen. Sie ist besonders hilfreich, um Mengenangaben zu ermitteln.

-- Alle Zeilen zählen
SELECT COUNT(*) AS anzahl_bestellungen
FROM bestellungen;
anzahl_bestellungen
5
-- Zeilen mit nicht-NULL-Beträgen zählen
SELECT COUNT(betrag) AS anzahl_beträge
FROM bestellungen;
anzahl_beträge
4
-- Bestellungen aus Berlin zählen
SELECT COUNT(*) AS bestellungen_berlin
FROM bestellungen
WHERE stadt = 'Berlin';
bestellungen_berlin
3

SUM

Die SUM-Funktion berechnet die Summe einer numerischen Spalte und ignoriert automatisch NULL-Werte.

-- Gesamtsumme aller Bestellungen
SELECT SUM(betrag) AS gesamtbetrag
FROM bestellungen;
gesamtbetrag
170
-- Gesamtsumme der Bestellungen aus Berlin
SELECT SUM(betrag) AS gesamt_berlin
FROM bestellungen
WHERE stadt = 'Berlin';
gesamt_berlin
70

AVG

Die AVG-Funktion berechnet den Durchschnitt einer numerischen Spalte. NULL-Werte werden dabei automatisch ausgeschlossen.

-- Durchschnittlicher Bestellbetrag
SELECT AVG(betrag) AS durchschnitt
FROM bestellungen;
durchschnitt
42.5
-- Durchschnittlicher Bestellbetrag in Berlin
SELECT AVG(betrag) AS durchschnitt_berlin
FROM bestellungen
WHERE stadt = 'Berlin';
durchschnitt_berlin
35

MIN und MAX

Die MIN– und MAX-Funktionen liefern die kleinsten bzw. größten Werte einer Spalte. Sie sind besonders hilfreich, um Extremwerte oder Ausreißer zu identifizieren.

-- Kleinster Bestellbetrag
SELECT MIN(betrag) AS kleinster_betrag
FROM bestellungen;
kleinster_betrag
20
-- Größter Bestellbetrag
SELECT MAX(betrag) AS groesster_betrag
FROM bestellungen;
groesster_betrag
70

Praxis-Hinweise:

  • COUNT wird oft verwendet, um die Anzahl von Benutzern, Bestellungen oder Produkten zu ermitteln.
  • SUM und AVG liefern schnelle Kennzahlen über Umsätze, Mengen oder Mittelwerte.
  • MIN und MAX helfen, Extremwerte zu erkennen und Ausreißer zu identifizieren.
  • Alle Aggregationsfunktionen lassen sich mit WHERE oder GROUP BY kombinieren, um gezielt bestimmte Datensätze auszuwerten.

6.2 GROUP BY

Die GROUP BY-Klausel wird in SQL verwendet, um Zeilen mit denselben Werten in einer oder mehreren Spalten zu gruppieren. So kannst du Aggregationen wie COUNT, SUM, AVG, MIN oder MAX auf Gruppen anwenden und z. B. herausfinden, wie viele Produkte pro Kategorie verkauft wurden oder welcher Umsatz pro Kategorie erzielt wird.

Beispieltabelle produkte

id produkt kategorie verkaufspreis
1 Laptop Elektronik 1200
2 Monitor Elektronik 300
3 Maus Elektronik 25
4 Stuhl Möbel 150
5 Tisch Möbel 350
6 Buch Bücher 20
7 Notebook Bücher 15

Beispiel 1 – Anzahl der Produkte pro Kategorie

SELECT kategorie, COUNT(*) AS anzahl_produkte
FROM produkte
GROUP BY kategorie;
kategorie anzahl_produkte
Elektronik 3
Möbel 2
Bücher 2
Erklärung: Die Produkte werden nach Kategorie gruppiert, und COUNT(*) liefert die Anzahl der Produkte pro Gruppe.

Beispiel 2 – Durchschnittlicher Verkaufspreis pro Kategorie

SELECT kategorie, AVG(verkaufspreis) AS durchschnittspreis
FROM produkte
GROUP BY kategorie;
kategorie durchschnittspreis
Elektronik 508.33
Möbel 250.00
Bücher 17.50
Erklärung: AVG berechnet den Durchschnittspreis innerhalb jeder Kategorie.

Beispiel 3 – Summe der Verkaufspreise pro Kategorie

SELECT kategorie, SUM(verkaufspreis) AS gesamtumsatz
FROM produkte
GROUP BY kategorie;
kategorie gesamtumsatz
Elektronik 1525
Möbel 500
Bücher 35
Erklärung: SUM addiert alle Verkaufspreise pro Kategorie und zeigt den Gesamtumsatz jeder Kategorie.

Praxis-Hinweise

  • GROUP BY wird immer zusammen mit Aggregationsfunktionen verwendet, um Kennzahlen pro Gruppe zu berechnen.
  • Du kannst mehrere Spalten gruppieren, z. B. GROUP BY kategorie, produkt, um feinere Unterteilungen zu erzeugen.
  • GROUP BY hilft, strukturierte Auswertungen zu erstellen, wie z. B. Umsatz pro Kategorie, Anzahl der Produkte pro Hersteller oder Durchschnittspreise pro Abteilung.
  • Ohne GROUP BY berechnet eine Aggregationsfunktion die Kennzahl nur über die gesamte Tabelle.

6.3 HAVING

Die HAVING-Klausel wird in SQL verwendet, um Gruppen zu filtern, die durch GROUP BY gebildet wurden. Während WHERE einzelne Zeilen filtert, filtert HAVING die aggregierten Gruppen. So kannst du z. B. nur Regionen anzeigen, in denen der Gesamtumsatz über einem bestimmten Wert liegt, oder nur Mitarbeiter mit besonders hoher Verkaufsleistung.

Beispieltabelle verkäufe

idmitarbeiterregionumsatz
1AnnaNord500
2BenSüd300
3CarlaNord700
4DanielWest200
5EvaSüd450
6FrankNord600
7GinaWest150

Beispiel 1 – Regionen mit mehr als 2 Verkäufen

SELECT region, COUNT(*) AS anzahl_verkäufe
FROM verkäufe
GROUP BY region
HAVING COUNT(*) > 2;
regionanzahl_verkäufe
Nord3

Erklärung: Die Gruppe „Nord“ hat mehr als 2 Verkäufe. HAVING filtert die anderen Regionen heraus.

Beispiel 2 – Regionen mit Gesamtumsatz über 1500

SELECT region, SUM(umsatz) AS gesamtumsatz
FROM verkäufe
GROUP BY region
HAVING SUM(umsatz) > 1500;
regiongesamtumsatz
Nord1800

Erklärung: SUM addiert den Umsatz pro Region, HAVING filtert nur die Region mit einem Gesamtumsatz größer 1500.

Beispiel 3 – Mitarbeiter mit durchschnittlichem Umsatz über 500

SELECT mitarbeiter, AVG(umsatz) AS durchschnitt_umsatz
FROM verkäufe
GROUP BY mitarbeiter
HAVING AVG(umsatz) > 500;
mitarbeiterdurchschnitt_umsatz
Carla700
Frank600

Erklärung: Jeder Mitarbeiter bildet eine Gruppe. HAVING filtert nur die Mitarbeiter, deren Durchschnittsumsatz über 500 liegt.

Praxis-Hinweise

  • HAVING wird immer zusammen mit GROUP BY verwendet, um gruppierte Ergebnisse zu filtern.
  • Im Gegensatz zu WHERE kann HAVING auch Aggregatfunktionen wie SUM, AVG oder COUNT prüfen.
  • Typische Anwendungsfälle: Regionen oder Abteilungen mit Mindestumsatz anzeigen, Top-Performer unter Mitarbeitern filtern oder nur Gruppen mit hoher Aktivität anzeigen.
  • Mehrere Bedingungen sind möglich, z. B. HAVING SUM(umsatz) > 1000 AND COUNT(*) > 1.

6.4 Zusammenfassung

In diesem Kapitel hast du gelernt, wie du SQL nicht nur zum Abrufen einzelner Datenzeilen, sondern auch für zusammenfassende Analysen einsetzen kannst. Aggregationsfunktionen wie COUNT, SUM, AVG, MIN und MAX ermöglichen es dir, über mehrere Zeilen hinweg Kennzahlen zu berechnen und wertvolle Erkenntnisse aus großen Datenmengen zu gewinnen. COUNT hilft dir beispielsweise, die Anzahl von Einträgen zu ermitteln, SUM liefert die Gesamtsumme bestimmter Werte, AVG berechnet Mittelwerte und MIN sowie MAX identifizieren Extremwerte. 

Durch die Kombination dieser Funktionen mit der GROUP BY-Klausel kannst du Daten in Gruppen unterteilen, sodass du Kennzahlen für jede Gruppe separat berechnen kannst, etwa die Anzahl von Produkten pro Kategorie, den durchschnittlichen Umsatz pro Region oder die Summe der Verkäufe pro Mitarbeiter. Mit der HAVING-Klausel kannst du diese Gruppen gezielt filtern und nur die relevanten Ergebnisse anzeigen, die bestimmte Bedingungen erfüllen, wie beispielsweise Kategorien mit einem Umsatz über einem bestimmten Wert oder Mitarbeiter mit besonders hoher Verkaufsleistung. Insgesamt bietet dir dieses Kapitel die Werkzeuge, um Daten nicht nur auszuwerten, sondern gezielt zu strukturieren und zu analysieren, sodass du fundierte Entscheidungen auf Basis aggregierter Informationen treffen kannst.

Quiz zu Aggregationen

Teste dein Wissen mit diesen Fragen:

  1. Welche Funktion zählt die Anzahl der Zeilen, die einer Bedingung entsprechen?

    • a) SUM

    • b) COUNT

    • c) AVG

  2. Wie gruppierst du Daten basierend auf den Werten in einer Spalte?

    • a) Mit HAVING

    • b) Mit GROUP BY

    • c) Mit ORDER BY

  3. Welche Klausel wird verwendet, um Gruppen basierend auf einer Bedingung zu filtern?

    • a) WHERE

    • b) HAVING

    • c) GROUP BY