1. Was sind Aggregatfunktionen?
Aggregatfunktionen berechnen Ergebnisse aus mehreren Datensätzen. Sie werden häufig für statistische Auswertungen und Berichte verwendet.
Unsere Beispieltabelle: bestellungen
| bestellung_id | kunde | stadt | betrag |
|---|---|---|---|
| 1 | Anna | Berlin | 120.00 |
| 2 | Max | Leipzig | 250.00 |
| 3 | Lisa | Dresden | 80.00 |
| 4 | Anna | Berlin | 180.00 |
| 5 | Max | Leipzig | 300.00 |
| 6 | Thomas | Berlin | 70.00 |
Alle folgenden Ergebnisse beziehen sich auf diese Beispieldaten.
2. COUNT() – Datensätze zählen
Mit COUNT() wird die Anzahl der Datensätze ermittelt.
SQL-Code
SELECT COUNT(*) AS anzahl
FROM bestellungen;
Ergebnis
| anzahl |
|---|
| 6 |
COUNT(*) zählt alle Zeilen. COUNT(spaltenname) zählt nur die Zeilen, in denen diese Spalte keinen NULL-Wert enthält.
3. SUM() – Summe berechnen
SUM() berechnet die Summe der Werte einer numerischen Spalte. NULL-Werte werden dabei ignoriert.
SQL-Code
SELECT SUM(betrag) AS gesamtumsatz
FROM bestellungen;
Ergebnis
| gesamtumsatz |
|---|
| 1000.00 |
Alle Bestellbeträge werden addiert: 120 + 250 + 80 + 180 + 300 + 70 = 1000.
4. AVG() – Durchschnitt berechnen
AVG() berechnet den arithmetischen Mittelwert einer numerischen Spalte. NULL-Werte werden nicht berücksichtigt.
SQL-Code
SELECT AVG(betrag) AS durchschnitt
FROM bestellungen;
Ergebnis
| durchschnitt |
|---|
| 166.666667 |
Die Summe von 1000 wird durch die Anzahl von 6 Bestellungen geteilt. Die genaue Darstellung der Nachkommastellen hängt vom Datenbanksystem und Datentyp ab.
5. MIN() – Kleinsten Wert finden
MIN() liefert den kleinsten Wert einer Spalte.
SQL-Code
SELECT MIN(betrag) AS kleinster_betrag
FROM bestellungen;
Ergebnis
| kleinster_betrag |
|---|
| 70.00 |
6. MAX() – Größten Wert finden
MAX() liefert den größten Wert einer Spalte.
SQL-Code
SELECT MAX(betrag) AS groesster_betrag
FROM bestellungen;
Ergebnis
| groesster_betrag |
|---|
| 300.00 |
7. Mehrere Funktionen kombinieren
Mehrere Aggregatfunktionen können in einer einzigen SQL-Abfrage verwendet werden.
SQL-Code
SELECT
COUNT(*) AS anzahl,
SUM(betrag) AS summe,
ROUND(AVG(betrag), 2) AS durchschnitt,
MIN(betrag) AS minimum,
MAX(betrag) AS maximum
FROM bestellungen;
Ergebnis
| anzahl | summe | durchschnitt | minimum | maximum |
|---|---|---|---|---|
| 6 | 1000.00 | 166.67 | 70.00 | 300.00 |
8. GROUP BY – Datensätze gruppieren
GROUP BY fasst Datensätze mit gleichen Werten zu Gruppen zusammen. Anschließend können Aggregatfunktionen für jede Gruppe berechnet werden.
Beispiel: Umsatz pro Stadt
SELECT stadt, SUM(betrag) AS umsatz
FROM bestellungen
GROUP BY stadt;
Beispielergebnis
| stadt | umsatz |
|---|---|
| Berlin | 370.00 |
| Leipzig | 550.00 |
| Dresden | 80.00 |
Die Bestellungen aus derselben Stadt werden zu einer Gruppe zusammengefasst. Die Reihenfolge ist ohne ORDER BY nicht garantiert.
9. COUNT() mit GROUP BY
Mit COUNT() und GROUP BY kann die Anzahl der Datensätze pro Gruppe ermittelt werden.
SQL-Code
SELECT stadt, COUNT(*) AS anzahl
FROM bestellungen
GROUP BY stadt;
Beispielergebnis
| stadt | anzahl |
|---|---|
| Berlin | 3 |
| Leipzig | 2 |
| Dresden | 1 |
10. HAVING – Gruppen filtern
HAVING wird verwendet, um gruppierte Ergebnisse zu filtern. Im Gegensatz zu WHERE kann HAVING Bedingungen für Aggregatfunktionen enthalten.
Beispiel: Städte mit mehr als einer Bestellung
SELECT stadt, COUNT(*) AS anzahl
FROM bestellungen
GROUP BY stadt
HAVING COUNT(*) > 1;
Ergebnis
| stadt | anzahl |
|---|---|
| Berlin | 3 |
| Leipzig | 2 |
Dresden wird nicht angezeigt, weil dort nur eine Bestellung vorliegt.
11. WHERE und HAVING im Vergleich
| WHERE | HAVING |
|---|---|
| Filtert einzelne Datensätze | Filtert gruppierte Ergebnisse |
| Wird vor GROUP BY angewendet | Wird nach GROUP BY angewendet |
| Beispiel: betrag > 100 | Beispiel: SUM(betrag) > 300 |
Beispiel mit WHERE und HAVING
SELECT stadt, SUM(betrag) AS umsatz
FROM bestellungen
WHERE betrag >= 100
GROUP BY stadt
HAVING SUM(betrag) > 300;
Ergebnis
| stadt | umsatz |
|---|---|
| Leipzig | 550.00 |
Zuerst werden Bestellungen unter 100 ausgeschlossen. Danach wird nach Stadt gruppiert. Zum Schluss werden nur Gruppen mit einem Umsatz über 300 angezeigt.
12. ROUND() – Zahlen runden
ROUND() rundet eine Zahl auf die gewünschte Anzahl von Nachkommastellen.
SQL-Code
SELECT ROUND(AVG(betrag), 2) AS durchschnitt
FROM bestellungen;
Ergebnis
| durchschnitt |
|---|
| 166.67 |
13. GROUP BY mit ORDER BY
Gruppierte Ergebnisse können anschließend sortiert werden.
Beispiel: Städte nach Umsatz sortieren
SELECT stadt, SUM(betrag) AS umsatz
FROM bestellungen
GROUP BY stadt
ORDER BY umsatz DESC;
Ergebnis
| stadt | umsatz |
|---|---|
| Leipzig | 550.00 |
| Berlin | 370.00 |
| Dresden | 80.00 |
14. Reihenfolge der SQL-Klauseln
Bei einer Abfrage mit Gruppierung wird häufig folgende Reihenfolge verwendet:
SELECT spalten, aggregatfunktion
FROM tabelle
WHERE bedingung
GROUP BY spalten
HAVING gruppenbedingung
ORDER BY spalten
LIMIT anzahl;
15. Praktische Übungen
Lösen Sie die folgenden Aufgaben mit der Beispieltabelle bestellungen.
Aufgabe 1
Berechnen Sie die Anzahl aller Bestellungen.
Lösung anzeigen
SELECT COUNT(*) AS anzahl
FROM bestellungen;
Aufgabe 2
Berechnen Sie den gesamten Umsatz.
Lösung anzeigen
SELECT SUM(betrag) AS umsatz
FROM bestellungen;
Aufgabe 3
Berechnen Sie den durchschnittlichen Bestellbetrag.
Lösung anzeigen
SELECT ROUND(AVG(betrag), 2) AS durchschnitt
FROM bestellungen;
Aufgabe 4
Berechnen Sie den Umsatz pro Stadt.
Lösung anzeigen
SELECT stadt, SUM(betrag) AS umsatz
FROM bestellungen
GROUP BY stadt;
Aufgabe 5
Zeigen Sie nur Städte an, deren Gesamtumsatz über 300 liegt.
Lösung anzeigen
SELECT stadt, SUM(betrag) AS umsatz
FROM bestellungen
GROUP BY stadt
HAVING SUM(betrag) > 300;
16. Zusammenfassung
Aggregatfunktionen ermöglichen Berechnungen mit mehreren Datensätzen. COUNT zählt Datensätze, SUM berechnet Summen, AVG den Durchschnitt und MIN sowie MAX ermitteln den kleinsten und größten Wert. GROUP BY gruppiert Datensätze. HAVING filtert gruppierte Ergebnisse.