GROUP BY und HAVING: Unterschied zwischen den Versionen

Aus FI-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 45: Zeile 45:


Alle Spalten im SELECT, die keine Aggregatfunktion verwenden, müssen in der GROUP BY-Klausel stehen.
Alle Spalten im SELECT, die keine Aggregatfunktion verwenden, müssen in der GROUP BY-Klausel stehen.
=== Erklärung: „Alle Spalten im SELECT, die nicht aggregiert werden, müssen in GROUP BY stehen“ ===
Wenn du GROUP BY verwendest, musst du jede Spalte, die du im SELECT-Teil ohne Aggregatfunktion angibst, auch in der GROUP BY-Klausel aufführen. Sonst gibt es einen Fehler.
==== ❌ Ungültige Abfrage: ====
<syntaxhighlight lang="sql"> SELECT verkäufer, produkt, SUM(betrag) FROM verkäufe GROUP BY verkäufer; </syntaxhighlight>
Diese Abfrage ist ungültig, weil produkt nicht in der GROUP BY-Klausel steht und auch keine Aggregatfunktion verwendet wird.
==== ✅ Korrekte Version: ====
<syntaxhighlight lang="sql"> SELECT verkäufer, produkt, SUM(betrag) FROM verkäufe GROUP BY verkäufer, produkt; </syntaxhighlight>
Hier stehen sowohl verkäufer als auch produkt im GROUP BY, also ist die Abfrage korrekt.


Es ist möglich, nach mehreren Spalten zu gruppieren:
Es ist möglich, nach mehreren Spalten zu gruppieren:


<syntaxhighlight lang="sql"> SELECT verkäufer, produkt, SUM(betrag) FROM verkäufe GROUP BY verkäufer, produkt; </syntaxhighlight>
<syntaxhighlight lang="sql"> SELECT verkäufer, produkt, SUM(betrag) FROM verkäufe GROUP BY verkäufer, produkt; </syntaxhighlight>

Version vom 5. Mai 2025, 11:36 Uhr

Einführung in GROUP BY in SQL

Die GROUP BY-Klausel wird in SQL verwendet, um Zeilen mit denselben Werten in einer oder mehreren Spalten zu gruppieren. Sie wird in der Regel mit Aggregatfunktionen wie COUNT(), SUM(), AVG(), MAX() oder MIN() kombiniert.

Syntax

 SELECT spalte1, AGGREGATFUNKTION(spalte2) FROM tabelle GROUP BY spalte1;

Beispiel

Gegeben sei eine Tabelle verkäufe:

verkäufer produkt betrag
Anna Apfel 100
Anna Birne 150
Ben Apfel 200
Anna Apfel 50
Ben Birne 300


Aufgabe:

Wie viel Umsatz hat jeder Verkäufer gemacht?

 SELECT verkäufer, SUM(betrag) AS gesamtumsatz FROM verkäufe GROUP BY verkäufer;

Ergebnis:

verkäufer gesamtumsatz
Anna 300
Ben 500


Hinweise

Alle Spalten im SELECT, die keine Aggregatfunktion verwenden, müssen in der GROUP BY-Klausel stehen.

Erklärung: „Alle Spalten im SELECT, die nicht aggregiert werden, müssen in GROUP BY stehen“

Wenn du GROUP BY verwendest, musst du jede Spalte, die du im SELECT-Teil ohne Aggregatfunktion angibst, auch in der GROUP BY-Klausel aufführen. Sonst gibt es einen Fehler.

❌ Ungültige Abfrage:

 SELECT verkäufer, produkt, SUM(betrag) FROM verkäufe GROUP BY verkäufer;

Diese Abfrage ist ungültig, weil produkt nicht in der GROUP BY-Klausel steht und auch keine Aggregatfunktion verwendet wird.

✅ Korrekte Version:

 SELECT verkäufer, produkt, SUM(betrag) FROM verkäufe GROUP BY verkäufer, produkt;

Hier stehen sowohl verkäufer als auch produkt im GROUP BY, also ist die Abfrage korrekt.

Es ist möglich, nach mehreren Spalten zu gruppieren:

 SELECT verkäufer, produkt, SUM(betrag) FROM verkäufe GROUP BY verkäufer, produkt;