GROUP BY 元件
GROUP BY 子句包含了下列元件:
- 一或多個不包含彙總的運算式。它們通常參考到群組資料行 (Grouping Column)。
- 選擇性的 ALL 關鍵字可指定傳回 GROUP BY 子句產生的所有群組,即使有些群組並沒有任何符合搜尋條件的資料行。
- CUBE 或 ROLLUP。
- 一般來說,HAVING 子句與 GROUP BY 子句一起使用,不過 HAVING 也可個別指定。
您可依照運算式來進行分組,只要它沒有包含彙總函數。例如:
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 子句中列出多個巢狀群組的資料行;也就是說,您可以依任何資料行組合來分組資料表。例如,此查詢將找出平均價格與今年度迄今的銷售總和,並以產品識別碼及特別優惠識別碼來加以分組:
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