GROUP BY-Komponenten
Die GROUP BY-Klausel enthält die folgenden Komponenten:
- Einen aggregatfreien Ausdruck oder mehrere aggregatfreie Ausdrücke. Hierbei handelt es sich in der Regel um Verweise auf die Gruppierungsspalten.
- Das ALL-Schlüsselwort (optional). Dieses legt fest, dass alle von der GROUP BY-Klausel erstellten Gruppen selbst dann zurückgegeben werden, wenn einige der Gruppen keine Zeilen enthalten, die die Suchbedingungen erfüllen.
- CUBE oder ROLLUP.
- In der Regel wird die HAVING-Klausel in Verbindung mit der GROUP BY-Klausel verwendet, obwohl HAVING auch separat angegeben werden kann.
Sie können nach einem Ausdruck gruppieren, sofern dieser keine Aggregatfunktionen enthält. Beispiel:
SELECT DATEPART(yy, HireDate) AS Year,
COUNT(*) AS NumberOfHires
FROM AdventureWorks.HumanResources.Employee
GROUP BY DATEPART(yy, HireDate)
Dies ist das Resultset.
Year NumberOfHires
----------- -------------
1997 2
2001 21
2000 45
1996 1
2003 3
1999 198
1998 16
2002 4
(8 row(s) affected)
In einer GROUP BY-Klausel müssen Sie den Namen einer Tabellen- oder Sichtspalte angeben, nicht den Namen einer mithilfe einer AS-Klausel zugewiesenen Resultsetspalte. Beispielsweise ist es nicht zulässig, die GROUP BY DATEPART(yy, HireDate)-Klausel durch GROUP BY Year zu ersetzen.
Zur Schachtelung von Gruppen können Sie in der GROUP BY-Klausel mehrere Spalten angeben; Sie können also eine Tabelle nach beliebigen Spaltenkombinationen gruppieren. Die folgende Abfrage ermittelt beispielsweise den Durchschnittspreis sowie die Summe der diesjährigen Verkäufe, gruppiert nach Produkt-ID und Sonderangebots-IDs:
USE AdventureWorks;
GO
SELECT ProductID, SpecialOfferID, AVG(UnitPrice) AS 'Average Price',
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY ProductID, SpecialOfferID
ORDER BY ProductID
GO