ITPub博客

首页 > IT职业 > IT生活 > 在分組查循中with{cube|rollup}的區別是什么

在分組查循中with{cube|rollup}的區別是什么

原创 IT生活 作者:zaorv 时间:2019-05-26 09:45:06 0 删除 编辑

在分組查循中with{cube|rollup}的區別是什么?

如:

use pangu

select firm_id,p_id,sum(o_price_quantity)as sum_values

[@more@]

from orders

group by firm_id,p_id

with cube

與

use pangu

select firm_id,p_id,sum(o_price_quantity)as sum_values

from orders

group by firm_id,p_id

with rollup

的區別是什么?

CUBE 和 ROLLUP 之间的区别在于:

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。

ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

例如,简单表 Inventory 中包含:

Item Color Quantity

-------------------- -------------------- --------------------------

Table Blue 124

Table Red 223

Chair Blue 101

Chair Red 210

下列查询将生成小计报表:

SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'

ELSE ISNULL(Item, 'UNKNOWN')

END AS Item,

CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'

ELSE ISNULL(Color, 'UNKNOWN')

END AS Color,

SUM(Quantity) AS QtySum

FROM Inventory

GROUP BY Item, Color WITH ROLLUP

Item Color QtySum

-------------------- -------------------- --------------------------

Chair Blue 101.00

Chair Red 210.00

Chair ALL 311.00

Table Blue 124.00

Table Red 223.00

Table ALL 347.00

ALL ALL 658.00

(7 row(s) affected)

如果查询中的 ROLLUP 关键字更改为 CUBE,那么 CUBE 结果集与上述结果相同,只是在结果集的末尾还会返回下列两行:

ALL Blue 225.00

ALL Red 433.00

CUBE 操作为 Item 和 Color 中值的可能组合生成行。例如,CUBE 不仅报告与 Item 值 Chair 相组合的 Color 值的所有可能组合(Red、Blue 和 Red + Blue),而且报告与 Color 值 Red 相组合的 Item 值的所有可能组合(Chair、Table 和 Chair + Table)。对于 GROUP BY 子句中右边的列中的每个值,ROLLUP 操作并不报告左边一列(或左边各列)中值的所有可能组合。例如,ROLLUP 并不对每个 Color 值报告 Item 值的所有可能组合。ROLLUP 操作的结果集具有类似于 COMPUTE BY 所返回结果集的功能;然而,

ROLLUP 具有下列优点: ROLLUP 返回单个结果集;COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。ROLLUP 可以在服务器游标中使用;COMPUTE BY 不可以。有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。

曾经想过怎样对查询出来的结果进行合计,
原来用 with{cube|rollup}可以解决的。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/729024/viewspace-1018366/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-09-12

  • 博文量
    192
  • 访问量
    206106