- ⚡Inkompatibler Zugriff auf
Select-Namen möglich
Erweiterungen
Die Group By-Klause hat zahlreiche, weit verbreitete Erweiterungen. Zu aller erst ist zu erwähnen, dass der SQL-Standard in der Group By-Klausel nur Spaltennamen, aber keine allgemeinen Ausdrücke zulässt. Dennoch unterstützen alle getesteten Systeme diese Möglichkeit ①. In diesem Zusammenhang ist es sehr praktisch, wenn man in der Group By-Klausel auch Spaltennamen verwenden kann, die erst in der Select-Klausel eingeführt werden ②. Auch diese Möglichkeit ist weit verbreitet, geht jedoch mit einer Gefahr einher:
SELECT b AS a
FROM (VALUES (1, 1), (1, 2)) t(a,b)
GROUP BY aDa die in der Select-Klausel definiert Spalte „a“ in der Group By-Klausel grundsätzlich nicht sichtbar ist, erfolgt die Gruppierung hier eindeutig nach der ersten Spalte der Tabelle „t“ sodass nur eine Gruppe entsteht. Manche Systeme geben dem in der Select-Klausel definierten Ausdruck Vorrang, was zu einem inkompatiblen Ergebnis mit zwei Gruppen führt.
Eine Möglichkeit ohne potentielle Mehrdeutigkeiten auf Select-Einträge zu verweisen ist die Verwendung von Spaltennummern, beginnend mit 1 ③. Damit geht man natürlich das Risiko ein, dass eine spätere Änderung der Select-Klausel die Bedeutung der Abfrage ändert. Je größer die Abfrage, genauer gesagt je weiter die Select und die Group By-Klauseln getrennt sind, desto größer das Risiko. Dasselbe Risiko geht man auch mit der Group By All-Variante ④ einher, die aller Voraussicht im nächsten SQL-Standard enthalten sei wird.
- Nur, wenn der komplette
Select-Eintrag demGroup By-Element gleicht. Also z. B. nicht:
SELECT a + b FROM ... GROUP BY a, b - ⚡
Select-Klausel Namen haben bei Mehrdeutigkeiten Vorrang - Kann Aggregate und Nicht-Aggregate nicht mischen:
a + count(*) - Entfernt die
Group By All-Klausel manchmal, wenn sie zu einem Fehler führt, der ohneGroup Bynicht auftritt
Siehe Auch
- Standard-Funktionen
- Nicht-Standard-Funktionen
Normative Referenzen
E051-02, „GROUP BY clause“ ist eine verpflichtende Funktion in ISO/IEC 9075-2:2023. Die Funktionalität war bereits in ANSI X3.135-1989 verpflichtend.

