Viele Zeilen, ein Wert
- Aggregatfunktion:fasst die Werte einer Spalte zu einem Wert zusammen.
- COUNT:
COUNT(*)zählt Zeilen;COUNT(Attribut)zählt nur Zeilen, in denen das Attribut nichtNULList. - SUM, AVG:Summe und Mittelwert einer Zahlenspalte.
- MIN, MAX:kleinster und größter Wert — auch bei Texten (alphabetisch) und Datumswerten.
- Mit WHERE:erst filtert
WHEREdie Zeilen, dann wird über den Rest gerechnet.
SELECT COUNT(*) AS Anzahl, AVG(Runden) AS Schnitt
FROM Lauf
WHERE Klasse = '10a';
Gruppen bilden
- GROUP BY:bildet für jeden Wert des Gruppierungsattributs eine Gruppe — jede Gruppe wird zu einer Ergebniszeile.
- SELECT-Regel:im
SELECTstehen nur Gruppierungsattribute und Aggregatfunktionen. - HAVING:filtert ganze Gruppen nach einem Aggregatwert, z. B.
HAVING COUNT(*) > 3. - WHERE oder HAVING:
WHEREwirkt auf Zeilen vor dem Gruppieren,HAVINGauf Gruppen danach.
Wähle eine Funktion und schalte GROUP BY ein. „Überlagern“ legt die Zeilen jeder Gruppe übereinander und rechnet sie zu einer Ergebniszeile zusammen — vergleiche links die Tabelle mit rechts dem Ergebnis.
Halte fest: Ohne GROUP BY wird die ganze Tabelle zu einer Zeile. Mit GROUP BY Klasse entsteht eine Zeile pro Klasse; HAVING streicht danach ganze Gruppen.
Herleitung:
SELECT *
FROM Ausleihe;SELECT Genre, COUNT(*), AVG(Tage)
FROM Ausleihe
GROUP BY Genre;SELECT Genre, COUNT(*) AS Anzahl, AVG(Tage) AS Schnitt
FROM Ausleihe
GROUP BY Genre
HAVING COUNT(*) > 2
ORDER BY Anzahl DESC;Gruppierte Abfrage:
SELECT Gruppenattribut, AGG(Attribut)
FROM Tabelle
WHERE Zeilenbedingung
GROUP BY Gruppenattribut
HAVING Gruppenbedingung;Allgemeine Hinweise
WHERE kennt keine Summen
WHERE COUNT(*) > 2 ist ein Fehler: Beim Filtern der Zeilen gibt es noch keine Gruppen. Bedingungen an Aggregate gehören in HAVING.
Fremde Spalten im SELECT
SELECT Name, AVG(Runden) … GROUP BY Klasse ist unzulässig: Welcher Name soll für die ganze Klasse stehen?
COUNT(*) oder COUNT(Spalte)?
Sobald NULL-Werte möglich sind, liefern beide verschiedene Zahlen. Lies genau, ob Zeilen oder vorhandene Werte gezählt werden sollen.
