All 关键字
GROUP BY 子句和 ALL 关键字
Transact-SQL 在 GROUP BY 子句中提供 ALL 关键字。只有在 SELECT 语句还包括 WHERE 子句时,ALL 关键字才有意义。
注意: |
---|
Microsoft SQL Server 的未来版本中将删除 GROUP BY ALL。避免在新的开发工作中使用 GROUP BY ALL,并计划修改当前使用它的应用程序。
|
不应该将 GROUP BY ALL 和访问远程表的查询一起使用。如果查询中也存在 WHERE 子句,则此类查询不支持 GROUP BY ALL;如果查询中不存在 WHERE 子句,GROUP BY ALL 就不会添加值。
如果使用 ALL 关键字,则即使某些组不包含符合搜索条件的行,查询结果也将包括 GROUP BY 子句生成的所有组。如果不使用 ALL 关键字,则包含 GROUP BY 子句的 SELECT 语句仅显示包含符合搜索条件的行的组。
第一个示例仅对数量 > 10 的订单分组。
第二个示例对所有订单分组。
对于没有符合条件的行的组,包含聚合值(平均价格)的列为 NULL。
USE AdventureWorks; GO SELECT ProductID, AVG(UnitPrice) AS 'Average Price' FROM Sales.SalesOrderDetail WHERE OrderQty > 10 GROUP BY ProductID ORDER BY ProductID ; GO
下面是结果集:
ProductID Average Price 707 20.7765 708 20.7482 709 6.175 711 20.7285 712 5.7592 714 32.05 ............................. (114 row(s) affected) -- Using GROUP BY ALL USE AdventureWorks; GO SELECT ProductID, AVG(UnitPrice) AS 'Average Price' FROM Sales.SalesOrderDetail WHERE OrderQty > 10 GROUP BY ALL ProductID ORDER BY ProductID ; GO
下面是结果集:
ProductID Average Price 707 20.7765 708 20.7482 709 6.175 710 NULL 711 20.7285 712 5.7592 .............................. Warning: Null value is eliminated by an aggregate or other SET operation. (266 row(s) affected)
GROUP BY 子句和 ALL 关键字
Transact-SQL 在 GROUP BY 子句中提供 ALL 关键字。只有在 SELECT 语句还包括 WHERE 子句时,ALL 关键字才有意义。
注意: |
---|
Microsoft SQL Server 的未来版本中将删除 GROUP BY ALL。避免在新的开发工作中使用 GROUP BY ALL,并计划修改当前使用它的应用程序。
|
不应该将 GROUP BY ALL 和访问远程表的查询一起使用。如果查询中也存在 WHERE 子句,则此类查询不支持 GROUP BY ALL;如果查询中不存在 WHERE 子句,GROUP BY ALL 就不会添加值。
如果使用 ALL 关键字,则即使某些组不包含符合搜索条件的行,查询结果也将包括 GROUP BY 子句生成的所有组。如果不使用 ALL 关键字,则包含 GROUP BY 子句的 SELECT 语句仅显示包含符合搜索条件的行的组。
第一个示例仅对数量 > 10 的订单分组。
第二个示例对所有订单分组。
对于没有符合条件的行的组,包含聚合值(平均价格)的列为 NULL。
USE AdventureWorks; GO SELECT ProductID, AVG(UnitPrice) AS 'Average Price' FROM Sales.SalesOrderDetail WHERE OrderQty > 10 GROUP BY ProductID ORDER BY ProductID ; GO
下面是结果集:
ProductID Average Price 707 20.7765 708 20.7482 709 6.175 711 20.7285 712 5.7592 714 32.05 ............................. (114 row(s) affected) -- Using GROUP BY ALL USE AdventureWorks; GO SELECT ProductID, AVG(UnitPrice) AS 'Average Price' FROM Sales.SalesOrderDetail WHERE OrderQty > 10 GROUP BY ALL ProductID ORDER BY ProductID ; GO
下面是结果集:
ProductID Average Price 707 20.7765 708 20.7482 709 6.175 710 NULL 711 20.7285 712 5.7592 .............................. Warning: Null value is eliminated by an aggregate or other SET operation. (266 row(s) affected)