COMPUTE (Transact-SQL)
生成合计作为附加的汇总列出现在结果集的最后。当与 BY 一起使用时,COMPUTE 子句在结果集内生成控制中断和小计。可在同一查询内指定 COMPUTE BY 和 COMPUTE。
语法
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM }
( expression ) } [ ,...n ]
[ BY expression [ ,...n ] ]
]
参数
AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM
指定要执行的聚合。下面是 COMPUTE 子句使用的行聚合函数。
行聚合函数 | 结果 |
---|---|
AVG |
数值表达式中所有值的平均值 |
COUNT |
选定的行数 |
MAX |
表达式中的最高值 |
MIN |
表达式中的最低值 |
STDEV |
表达式中所有值的标准偏差 |
STDEVP |
表达式中所有值的总体标准偏差 |
SUM |
数值表达式中所有值的和 |
VAR |
表达式中所有值的方差 |
VARP |
表达式中所有值的总体方差 |
没有等价于 COUNT(*) 的函数。若要查找由 GROUP BY 和 COUNT(*) 生成的汇总信息,请使用不带 BY 的 COMPUTE 子句。
这些函数忽略空值。
如果是用 COMPUTE 子句指定的行聚合函数,则不允许它们使用 DISTINCT 关键字。
将整数数据相加或求其平均值时,即使列的数据类型为 smallint 或 tinyint,Microsoft SQL Server 2005 数据库引擎 也将结果视为 int 值。有关将数据相加或求平均值时的返回类型的详细信息,请参阅 SUM (Transact-SQL) 和 AVG (Transact-SQL)。
注意: |
---|
为减少 ODBC 和 DB-Library 程序中出现溢出错误的可能性,请将平均或汇总结果的所有变量声明都设置为数据类型 int。 |
expression
表达式(Transact-SQL),如对其执行计算的列名。expression 必须出现在选择列表中,并且必须被指定为与选择列表中的某个表达式相同。不能在 expression 中使用选择列表中所指定的列别名。
注意: |
---|
不能在 COMPUTE 或 COMPUTE BY 子句中指定 ntext、text 或 image 数据类型。 |
BY expression
在结果集中生成控制中断和小计。expression 是关联 ORDER BY 子句中 order_by_expression 的相同副本。通常,这是列名或列别名。可以指定多个表达式。在 BY 之后列出多个表达式将把组划分为子组,并在每个组级别应用聚合函数。
如果使用 COMPUTE BY,则还必须使用 ORDER BY 子句。表达式必须与在 QRDER BY 后列出的子句相同或是其子集,并且顺序必须相同。例如,如果 ORDER BY 子句为 ORDER BY a, b, c
,则
COMPUTE 子句可以为以下任意项或所有项:
COMPUTE BY a, b, c
COMPUTE BY a, b
COMPUTE BY a
注意: |
---|
在带有 COMPUTE 子句的 SELECT 语句中,选择列表中的列顺序优于 COMPUTE 子句中的聚合函数顺序。ODBC 和 DB-library 程序员必须知道这种顺序要求,以将聚合函数结果放在正确的位置。 |
由于包含 COMPUTE 的语句生成表并且这些表的汇总结果不存储在数据库中,因此在 SELECT INTO 语句中不能使用 COMPUTE。因而,任何由 COMPUTE 生成的计算结果都不会出现在用 SELECT INTO 语句创建的新表内。
当 SELECT 语句是 DECLARE CURSOR 语句的一部分时,不能使用 COMPUTE 子句。
示例
A. 在查询中使用 COMPUTE 返回合计
在以下示例中,SELECT
语句使用简单的 COMPUTE
子句生成 SalesOrderHeader
表中 SubTotal
与 TotalDue
的和的合计。
USE AdventureWorks;
GO
SELECT CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
WHERE SalesPersonID = 35
ORDER BY OrderDate
COMPUTE SUM(SubTotal), SUM(TotalDue);
B. 在查询中使用 COMPUTE 返回合计
在以下示例中,SELECT
语句使用 COMPUTE
子句按销售人员生成 SalesOrderHeader
表中 SubTotal
与 TotalDue
的和的合计。
USE AdventureWorks;
GO
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID;
请参阅
参考
SELECT (Transact-SQL)
ORDER BY 子句 (Transact-SQL)