Mit Hilfe der GROUP BY-Klausel werden Tabellensätze zu Gruppen zusammengefasst. Zwei Sätze gehören zu derselben Gruppe, wenn für jede Gruppierungsspalte die Werte in beiden Sätzen nach den Vergleichsregeln (siehe Abschnitt „Vergleich von zwei Zeilen") gleich sind oder beide der NULL-Wert sind.
Die Ergebnistabelle enthält für jede Gruppe einen Satz.
SELECT ...
GROUP BY
spalte,...
spalte
Gruppierungsspalte. spalte muss Teil einer Tabelle sein, die in der FROM-Klausel angegeben wurde. Nicht eindeutige Spaltennamen müssen mit dem Tabellennamen qualifiziert werden. Haben Sie in der FROM-Klausel einen Korrelationsnamen für die betroffene Tabelle vereinbart, muss dieser Name zur Qualifizierung verwendet werden.
Multiple Spalten dürfen nicht als Gruppierungsspalte verwendet werden.
Auswirkung der GROUP BY-Klausel
Wenn Sie die GROUP BY-Klausel angeben, dürfen in der SELECT-Liste nur noch Spaltennamen vorkommen, die bei GROUP BY aufgeführt oder Argument einer Mengenfunktion sind.
Mengenfunktionen für Spalten einer gruppierten Tabelle werden für jede Gruppe ausgewertet..
Wie werden die Gruppen gebildet?
Die Sätze, die in allen angegebenen Gruppierungsspalten einen nach den Vergleichsregeln gleichen Wert enthalten, bilden eine Gruppe.
Sätze, die in den gleichen Gruppierungsspalten den NULL-Wert und in den restlichen Gruppierungsspalten gleiche Werte enthalten, werden zu einer Gruppe zusammengefasst..
Beispiele
Für jede Auftragsnummer den durchschnittlichen Mehrwertsteuersatz bilden:
SELECT anr, AVG(mwsatz) FROM leistung GROUP BY anr anr 200 0.14 211 0.06 250 0.07
Für alle Kunden außerhalb der USA wird die Anzahl der Kontaktpersonen, gruppiert nach der Kundennummer, ermittelt. Bei Angabe einer GROUP BY-Klausel dürfen in der SELECT-Liste nur noch Spaltennamen vorkommen, die in der GROUP BY-Klausel angegeben sind oder Argument einer Mengenfunktion sind. Die Ergebnistabelle des SELECT-Ausdrucks erhält für jede Gruppe einen Satz.
SELECT kontakt.knr, COUNT(*) AS anzahl FROM kontakt, kunde WHERE kontakt.knr = kunde.knr AND kunde.land <>'USA' GROUP BY kontakt.knr
Ergebnistabelle
knr | anzahl |
100 | 2 |
101 | 1 |
102 | 1 |
103 | 1 |
104 | 1 |
105 | 1 |
Wenn der SELECT-Ausdruck um die folgende HAVING-Klausel (siehe folgenden Abschnitt) ergänzt wird, dann enthält die Ergebnistabelle nur noch den ersten Satz.
HAVING COUNT(*) > 1