GROUP BY und HAVING: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 80: | Zeile 80: | ||
| Ben || Birne || 300 | | Ben || Birne || 300 | ||
|} | |} | ||
Sehr gerne! Hier ist eine **Einführung in `HAVING`** im selben **MediaWiki-Stil** wie zuvor bei `GROUP BY`, mit Erklärung, Syntax, Beispiel und Tabelle: | |||
--- | |||
\== Einführung in HAVING in 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 === | |||
<syntaxhighlight lang="sql"> | |||
SELECT spalte1, AGGREGATFUNKTION(spalte2) | |||
FROM tabelle | |||
GROUP BY spalte1 | |||
HAVING AGGREGATFUNKTION(spalte2) [Bedingung]; | |||
</syntaxhighlight> | |||
--- | |||
\=== Beispiel: Tabelle ''verkäufe'' === | |||
{| class="wikitable" | |||
\|- | |||
| ! verkäufer !! produkt !! betrag | | | | | | |||
| -------------------------------- | - | ----- | - | --- | | |||
| Anna | | Apfel | | 100 | | |||
| - | | | | | | |||
| Anna | | Birne | | 150 | | |||
| - | | | | | | |||
| Ben | | Apfel | | 200 | | |||
| - | | | | | | |||
| Anna | | Apfel | | 50 | | |||
| - | | | | | | |||
| Ben | | Birne | | 300 | | |||
| } | | | | | | |||
--- | |||
\=== Abfrage: Nur Produkte mit einem Umsatz über 150 € je Verkäufer anzeigen === | |||
<syntaxhighlight lang="sql"> | |||
SELECT verkäufer, produkt, SUM(betrag) AS gesamtumsatz | |||
FROM verkäufe | |||
GROUP BY verkäufer, produkt | |||
HAVING SUM(betrag) > 150; | |||
</syntaxhighlight> | |||
--- | |||
'''Ergebnis:''' | |||
{| class="wikitable" | |||
\|- | |||
| ! verkäufer !! produkt !! gesamtumsatz | | | | | | |||
| -------------------------------------- | - | ----- | - | --- | | |||
| Anna | | Apfel | | 150 | | |||
| - | | | | | | |||
| Ben | | Apfel | | 200 | | |||
| - | | | | | | |||
| Ben | | Birne | | 300 | | |||
| } | | | | | | |||
--- | |||
\=== Erklärung === | |||
* Die `GROUP BY`-Klausel gruppiert die Zeilen nach `verkäufer` und `produkt`. | |||
* `SUM(betrag)` berechnet den Umsatz je Gruppe. | |||
* Die `HAVING`-Klausel filtert alle Gruppen heraus, deren Umsatz nicht über 150 liegt. | |||
--- | |||
Möchtest du noch ein kombiniertes Beispiel mit `WHERE` + `GROUP BY` + `HAVING`? |
Version vom 5. Mai 2025, 11:48 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 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 verkäufer;
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. Sonst gibt es einen Fehler.
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 |
Sehr gerne! Hier ist eine **Einführung in `HAVING`** im selben **MediaWiki-Stil** wie zuvor bei `GROUP BY`, mit Erklärung, Syntax, Beispiel und Tabelle:
---
\== Einführung in HAVING in 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 verkäufe ===
\|-| | | | | - | ----- | - | --- | | | Apfel | | 100 | | | | | | | | Birne | | 150 | | | | | | | | Apfel | | 200 | | | | | | | | Apfel | | 50 | | | | | | | | Birne | | 300 | | | | | |
--- \=== Abfrage: Nur Produkte mit einem Umsatz über 150 € je Verkäufer anzeigen === SELECT verkäufer, produkt, SUM(betrag) AS gesamtumsatz
FROM verkäufe
GROUP BY verkäufer, produkt
HAVING SUM(betrag) > 150;
--- Ergebnis: \|-
|