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

请参阅

其他资源

SELECT (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助