SQL – Funktionen und Gruppierung

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
1AnnaBerlin120.00
2MaxLeipzig250.00
3LisaDresden80.00
4AnnaBerlin180.00
5MaxLeipzig300.00
6ThomasBerlin70.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

stadtumsatz
Berlin370.00
Leipzig550.00
Dresden80.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

stadtanzahl
Berlin3
Leipzig2
Dresden1

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

stadtanzahl
Berlin3
Leipzig2

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

stadtumsatz
Leipzig550.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

stadtumsatz
Leipzig550.00
Berlin370.00
Dresden80.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;
Merken: WHERE filtert Zeilen vor der Gruppierung. HAVING filtert Gruppen nach der Gruppierung.

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.