转自:http://msdn.microsoft.com/zh-cn/library/ms189288(v=sql.90).aspx GROUP BY 子句用来为结果集中的每一行产生聚合值。如果聚合函数没有使用 GROUP BY 子句,则只为 SELECT 语句报告一个聚合值。 下面的示例查找数据库中各销售订单的总额。
USE AdventureWorks;
GO
SELECT SalesOrderID, SUM(LineTotal)
AS SubTotalFROM Sales.SalesOrderDetail sod
GROUP BY SalesOrderID
ORDER BY SalesOrderID ;
GO
GROUP BY 关键字后跟一个列的列表,称为组合列。GROUP BY 子句限制结果集中的行数,每个不同的值在组合列中只占一行。每个结果集行都包含与其组合列中的特定值相关的汇总数据。 当 SELECT 语句中包含 GROUP BY 关键字时,对可以在选择列表中指定的项目有一些限制。选择列表中允许的项目是:
例如,TableX 包含:
如果 如果
SELECT ColumnA, MAX(ColumnB) AS MaxB, SUM(ColumnC) AS SumCFROM TableXGROUP BY ColumnA
此选择语句返回两行,为
ColumnA MaxB SumC ----------- ---- ----------- 1 ghi 18 2 mno 11 (2 row(s) affected)
但是,选择列表中不能只包含
SELECT ColumnA, ColumnB, SUM(ColumnC) AS SumCFROM TableXGROUP BY ColumnA
由于 GROUP BY 只能返回一行,该行在 不能对 ntext、text、image 或 bit 列使用 GROUP BY 或 HAVING,除非它们所在的函数返回的值属于其他数据类型。这样的函数包括 SUBSTRING 和 CAST。 ![]() |