
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
:
id | benutzer_id | betrag | stadt |
---|---|---|---|
1 | 1 | 50 | Berlin |
2 | 2 | 30 | Hamburg |
3 | 1 | 20 | Berlin |
4 | 3 | NULL | Berlin |
5 | 4 | 70 | Mü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
oderGROUP BY
kombinieren, um gezielt bestimmte Datensätze auszuwerten.
6.2 GROUP BY
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 |
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 |
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 |
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
id | mitarbeiter | region | umsatz |
---|---|---|---|
1 | Anna | Nord | 500 |
2 | Ben | Süd | 300 |
3 | Carla | Nord | 700 |
4 | Daniel | West | 200 |
5 | Eva | Süd | 450 |
6 | Frank | Nord | 600 |
7 | Gina | West | 150 |
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;
region | anzahl_verkäufe |
---|---|
Nord | 3 |
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;
region | gesamtumsatz |
---|---|
Nord | 1800 |
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;
mitarbeiter | durchschnitt_umsatz |
---|---|
Carla | 700 |
Frank | 600 |
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 wieSUM
,AVG
oderCOUNT
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:
Welche Funktion zählt die Anzahl der Zeilen, die einer Bedingung entsprechen?
a)
SUM
b)
COUNT
c)
AVG
Wie gruppierst du Daten basierend auf den Werten in einer Spalte?
a) Mit
HAVING
b) Mit
GROUP BY
c) Mit
ORDER BY
Welche Klausel wird verwendet, um Gruppen basierend auf einer Bedingung zu filtern?
a)
WHERE
b)
HAVING
c)
GROUP BY
Antworten:
1. b) COUNT
2. b) Mit GROUP BY
3. b) HAVING
Audit-Trails implementieren: Wer hat was wann geändert?
Eine kritische Kundennummer wurde in deiner Datenbank geändert, und die...
Artikel lesenINNER JOIN in SQL: So verbindest du Tabellen effizient
90 % aller SQL-Datenabfragen benötigen JOINs – doch der INNER...
Artikel lesenWarum deine SQL-Abfrage keine Ergebnisse liefert – 5 häufige Ursachen
Du hast deine SQL-Abfrage geschrieben, sie läuft ohne Fehlermeldung durch...
Artikel lesenDISTINCT verwenden: Doppelte Werte entfernen
Stell dir vor, du willst eine eindeutige Liste aller Länder...
Artikel lesenDatenqualität sichern: Constraint-Design für robuste Datenbanken
Stell dir vor, ein Bug in deiner Anwendung fügt leere...
Artikel lesenSQL CASE-Statement einfach erklärt: Bedingte Logik für Spalten, Gruppen und Datenqualität
Oft reichen einfache Abfragen nicht aus. Vielleicht möchtest du Alterswerte...
Artikel lesenGruppieren wie ein Profi: GROUP BY vs. HAVING anhand echter Use-Cases erklärt
Wenn du mit SQL arbeitest, wirst du schnell merken: Es...
Artikel lesenEinsteiger-Guide zu PostgreSQL: Warum und wie du mit SQL in PostgreSQL startest
PostgreSQL ist eine der beliebtesten und leistungsstärksten Open-Source-Datenbanken weltweit. Für...
Artikel lesen