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

Siehe auch

Andere Ressourcen

SELECT (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005