在SQL中,如何理解Compute?

在SQL中,如何理解Compute?,第1张

在SQL中可以使用COMPUTE BY子句来实现返回的结果集中有合计数据,还有有原始的详细记录。

COMPTE生成合计作为附加的汇总列出现在结果集的最后。当与BY一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总。

COMPUTE 生成多个结果集。一类结果集包含每个组的明细行,其中包含选择列表中的表达式。另一类结果集包含组的子聚合,或 SELECT 语句 的总聚合。

选择列表可包含除分组依据列或聚合函数之外的其它表达式。聚合函数在 COMPUTE 子句中指定,而不是在选择列表中。 

扩展资料:

compute by 子句的规则:

(1)不能将distinct与行统计函数一起使用。

(2)compute  by 子句中出的列必须出现在选择列表中。

(3)不能在含有compute by 子句的语句中使用select into 子句,因为包括compute 子句的语句会产生不规则的行。

(4)如果使用了compute by子句,则必须使用order by 子句, 而且compute by子句中的列必须包含在order by 子句中,并且对列的前后顺序和起始项都要一致。

(5)如果compute 省略了 by ,则order by 也可以省略。

提供 COMPUTE 和 COMPUTE BY 是为了向后兼容。请改为使用下列组件:

Microsoft® SQL Server™ 2000 Analysis Services 和用于 Analysis Services 的 OLE DB

或 Microsoft ActiveX® 数据对象(多维)(ADO MD) 一起使用。有关更多信息,请参见 Microsoft SQL Server™ 2000

Analysis Services。

ROLLUP 运算符。有关更多信息,请参见用 ROLLUP 汇总数据。

COMPUTE BY 子句使您得以用同一 SELECT 语句既查看明细行,又查看汇总行。可以计算子组的汇总值,也可以计算整个结果集的汇总值。

COMPUTE 子句需要下列信息:

可选的 BY 关键字,该关键字可按对一列计算指定的行聚合。

行聚合函数名称;例如,SUM、AVG、MIN、MAX 或 COUNT。

要对其执行行聚合函数的列。

COMPUTE 生成的结果集

COMPUTE 所生成的汇总值在查询结果中显示为分离的结果集。包括 COMPUTE

子句的查询的结果类似于控制中断报表,即汇总值由指定的组(或称中断)控制的报表。可以为各组生成汇总值,也可以对同一组计算多个聚合函数。

当 COMPUTE 带有可选的 BY 子句时,符合 SELECT 条件的每个组都有两个结果集:

每个组的第一个结果集是明细行集,其中包含该组的选择列表信息。

每个组的第二个结果集有一行,其中包含该组的 COMPUTE 子句中所指定的聚合函数的小计

当 COMPUTE 不带可选的 BY 子句时,SELECT 语句有两个结果集:

每个组的第一个结果集是包含选择列表信息的所有明细行。

第二个结果集有一行,其中包含 COMPUTE 子句中所指定的聚合函数的合计。

COMPUTE 用法示例

下列 SELECT 语句使用简单 COMPUTE 子句生成 titles 表中 price 及 advance 的求和总计:

USE pubsSELECT type, price, advanceFROM titlesORDER BY typeCOMPUTE SUM(price), SUM(advance)

下列查询在 COMPUTE 子句中加入可选的 BY 关键字,以生成每个组的小计:

USE pubsSELECT type, price, advanceFROM titlesORDER BY typeCOMPUTE SUM(price), SUM(advance) BY type

此 SELECT 语句的结果用 12

个结果集返回,六个组中的每个组都有两个结果集。每个组的第一个结果集是一个行集,其中包含选择列表中所请求的信息。每个组的第二个结果集包含 COMPUTE

子句中两个 SUM 函数的小计。

说明 一些实用工具(如

osql)显示多个小计或合计聚合汇总的方式可能会使用户以为每个小计都是结果集中的单独一行。这是由于该实用工具设置输出格式的方式;小计或合计聚合返回时单独占用一行。其它应用程序(如

SQL 查询分析器)将多个聚合设置在同一行。

比较 COMPUTE 和 GROUP BY

COMPUTE 和 GROUP BY 之间的区别汇总如下:

GROUP BY 生成单个结果集。每个组都有一个只包含分组依据列和显示该组子聚合的聚合函数的行。选择列表只能包含分组依据列和聚合函数。

COMPUTE 生成多个结果集。一类结果集包含每个组的明细行,其中包含选择列表中的表达式。另一类结果集包含组的子聚合,或 SELECT

语句的总聚合。选择列表可包含除分组依据列或聚合函数之外的其它表达式。聚合函数在 COMPUTE 子句中指定,而不是在选择列表中。

下列查询使用 GROUP BY 和聚合函数;该查询将返回一个结果集,其中每个组有一行,该行中包含该组的聚合小计:

USE pubsSELECT type, SUM(price), SUM(advance)FROM titlesGROUP BY type

说明 在 COMPUTE 或 COMPUTE

BY 子句中,不能包含 ntext、text 或 image 数据类型。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9726871.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存