GROUP BY und HAVING: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung Markierung: Manuelle Zurücksetzung |
||
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Einführung in GROUP BY - SQL == | == Einführung in GROUP BY - 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. | 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 === | === Syntax === | ||
Zeile 11: | Zeile 11: | ||
=== Beispiel === | === Beispiel === | ||
Tabelle '''verkauf''': | |||
{| class="wikitable" | {| class="wikitable" | ||
Zeile 34: | Zeile 34: | ||
<syntaxhighlight lang="sql">SELECT verkaeufer, SUM(betrag) AS gesamtumsatz | <syntaxhighlight lang="sql">SELECT verkaeufer, SUM(betrag) AS gesamtumsatz | ||
FROM verkauf | FROM verkauf | ||
GROUP BY | GROUP BY verkaeufer; </syntaxhighlight> | ||
==== Ergebnis: ==== | ==== Ergebnis: ==== | ||
Zeile 51: | Zeile 51: | ||
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. | ||
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 | 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. | ||
==== Ungültige Abfrage: ==== | ==== Ungültige Abfrage: ==== | ||
Zeile 100: | Zeile 100: | ||
=== Beispiel === | === Beispiel === | ||
Tabelle '''verkauf''': | |||
{| class="wikitable" | {| class="wikitable" | ||
Zeile 166: | Zeile 166: | ||
=== Beispiel === | === Beispiel === | ||
Tabelle '''verkauf''': | |||
{| class="wikitable" | {| class="wikitable" |
Aktuelle Version vom 12. Mai 2025, 15:10 Uhr
Einführung in GROUP BY - 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
Tabelle verkauf:
verkaeufer | 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 verkaeufer, SUM(betrag) AS gesamtumsatz
FROM verkauf
GROUP BY verkaeufer;
Ergebnis:
verkaeufer | gesamtumsatz |
---|---|
Anna | 300 |
Ben | 500 |
Hinweise
Alle Spalten im SELECT, die keine Aggregatfunktion verwenden, müssen in der GROUP BY-Klausel 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.
Ungültige Abfrage:
SELECT verkaeufer, produkt, SUM(betrag)
FROM verkauf
GROUP BY verkaeufer;
Diese Abfrage ist ungültig, weil produkt nicht in der GROUP BY-Klausel steht und auch keine Aggregatfunktion verwendet wird.
Korrekte Version:
SELECT verkaeufer, produkt, SUM(betrag)
FROM verkauf
GROUP BY verkaeufer, produkt;
Hier stehen sowohl verkäufer als auch produkt im GROUP BY, also ist die Abfrage korrekt.
Ergebnis:
verkaeufer | produkt | gesamtumsatz |
---|---|---|
Anna | Apfel | 150 |
Anna | Birne | 150 |
Ben | Apfel | 200 |
Ben | Birne | 300 |
Einführung in HAVING - SQL
Die HAVING-Klausel wird in SQL verwendet, um Gruppenergebnisse nach der Aggregation zu filtern. Sie funktioniert ähnlich wie WHERE, aber im Unterschied zu WHERE kann HAVING Aggregatfunktionen wie SUM(), AVG(), COUNT() usw. verwenden.
Unterschied: WHERE vs. HAVING
WHERE filtert vor der Gruppierung (auf Zeilenebene).
HAVING filtert nach der Gruppierung (auf Gruppenebene).
Syntax
SELECT spalte1, AGGREGATFUNKTION(spalte2)
FROM tabelle
GROUP BY spalte1
HAVING AGGREGATFUNKTION(spalte2) [Bedingung];
Beispiel
Tabelle verkauf:
verkaeufer | produkt | betrag |
---|---|---|
Anna | Apfel | 100 |
Anna | Birne | 150 |
Ben | Apfel | 200 |
Anna | Apfel | 50 |
Ben | Birne | 300 |
Aufgabe:
Nur Produkte mit einem Umsatz über 150 € je Verkäufer anzeigen.
SELECT verkaeufer, produkt, SUM(betrag) AS gesamtumsatz
FROM verkauf
GROUP BY verkaeufer, produkt
HAVING SUM(betrag) > 150;
Ergebnis:
verkaeufer | produkt | gesamtumsatz |
---|---|---|
Ben | Apfel | 200 |
Ben | Birne | 300 |
Gruppierte Summen:
Anna, Apfel → 100 + 50 = 150 → nicht > 150, fällt raus
Anna, Birne → 150 → nicht > 150, fällt raus
Ben, Apfel → 200 → korrekt
Ben, Birne → 300 → korrekt
Erklärung
Die GROUP BY-Klausel gruppiert die Zeilen nach verkaeufer und produkt.
SUM(betrag) berechnet den Umsatz je Gruppe.
Die HAVING-Klausel filtert alle Gruppen heraus, deren Umsatz nicht über 150 liegt.
Beispiel: WHERE + GROUP BY + HAVING
Syntax
SELECT spalte1, AGGREGATFUNKTION(spalte2)
FROM tabelle
WHERE bedingung
GROUP BY spalte1
HAVING AGGREGATFUNKTION(spalte2) [Bedingung];
Beispiel
Tabelle verkauf:
verkaeufer | produkt | betrag |
---|---|---|
Anna | Apfel | 100 |
Anna | Birne | 150 |
Ben | Apfel | 200 |
Anna | Apfel | 50 |
Ben | Birne | 300 |
Aufgabe:
Nur Umsätze mit Äpfeln und mehr als 150 € pro Verkäufer anzeigen.
SELECT verkaeufer, produkt, SUM(betrag) AS gesamtumsatz
FROM verkauf
WHERE produkt = 'Apfel'
GROUP BY verkaeufer, produkt
HAVING SUM(betrag) > 150;
Ergebnis:
verkaeufer | produkt | gesamtumsatz |
---|---|---|
Ben | Apfel | 200 |
Nur Ben hat mit Äpfeln einen Umsatz über 150 € erreicht.
Erklärung
WHERE produkt = 'Apfel' filtert alle Zeilen vorab auf Apfel-Verkäufe.
GROUP BY verkaeufer, produkt gruppiert nach Verkäufer und Produkt.
HAVING SUM(betrag) > 150 filtert die Gruppen, deren Umsatz über 150 € liegt.