GROUP BY 组件
GROUP BY 子句包含下列组件:
- 一个或多个自由聚合的表达式。通常是对分组列的引用。
- 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 Year 替换 GROUP BY DATEPART(yy, HireDate) 子句是不合法的。
可以在 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