生成合计作为附加的汇总列出现在结果集的最后。当与 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 子句。
这些函数忽略空值。
如果是用 COPPUT 子句指定的行聚合函数,则不允许它们使用 DISTINCT 关键字。
当添加或平均整数数据时,即使列的数据类型为 smallint 或 tinyint,SQL Server 也将结果视为 int 值。有关返回添加数据或平均数据的类型的更多信息,请参见 SUM 和 AVG。
说明 为减少在 ODBC 和 DB-Library 程序中溢出错误的可能性,请将平均或汇总结果的所有变量声明均作为数据类型 int。
( expression )
表达式,如对其执行计算的列名。expression 必须出现在选择列表中,并且必须将其指定为与选择列表中的某个表达式完全一样。在 expression 内不能使用在选择列表中指定的列的别名。
说明 在 COMPUTE 或 COMPUTE BY 子句中,不能指定 ntext、text 和 image 数据类型。
BY expression
在结果集内生成控制中断和分类汇总。expression 是 order_by_expression 在相关 ORDER BY 子句中的精确复本。一般情况下,这是列名或列的别名。可指定多个表达式。在 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 子句。