GROUP BY コンポーネント
GROUP BY 句の構成要素は、次のようになっています。
- 集計を含まない 1 つ以上の式。これらの式は通常、グループ化列を参照します。
- 省略可能な ALL キーワード。このキーワードを使用すると、一部のグループに検索条件を満たす行がなくても、GROUP BY 句によって生成されたすべてのグループを返すように指定されます。
- CUBE または ROLLUP。
- HAVING 句は単独で指定することもできますが、通常は GROUP BY 句と一緒に使用されます。
式に集計関数が含まれない限り、式によってグループ化できます。次に例を示します。
SELECT DATEPART(yy, HireDate) AS Year,
COUNT(*) AS NumberOfHires
FROM AdventureWorks.HumanResources.Employee
GROUP BY DATEPART(yy, HireDate)
以下に結果セットを示します。
Year NumberOfHires
----------- -------------
1997 2
2001 21
2000 45
1996 1
2003 3
1999 198
1998 16
2002 4
(8 row(s) affected)
GROUP BY では、AS 句で割り当てた結果セット列の名前ではなく、テーブル列またはビュー列の名前を指定する必要があります。たとえば、GROUP BY DATEPART(yy, HireDate) 句を GROUP BY Year に置き換えるのは無効です。
GROUP BY 句に複数の列を並べることで、グループを入れ子にできます。つまり任意の列の組み合わせでテーブルをグループ化できます。たとえば、次のクエリは、平均価格と今年に入ってからの売り上げの合計を、製品 ID と特別奉仕品 ID でグループ化して返します。
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