用 ROLLUP 汇总数据
在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。有关更多信息,请参见用 CUBE 汇总数据。
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 生成的更为高效。
分享到:
相关推荐
Oracle数据库中的ROLLUP和CUBE是两种用于生成数据汇总的SQL操作,它们在数据分析和报告制作中非常有用。本文将详细介绍这两个概念以及如何在实际应用中使用它们。 首先,我们来理解`ROLLUP`。ROLLUP操作是GROUP BY...
### rollup cube grouping sets 的用法 在数据库查询语言 SQL 中,`ROLLUP`, `CUBE`, 和 `GROUPING SETS` 是三个重要的概念,它们主要用于处理多维度数据的汇总和分组问题,使得数据分析更加灵活高效。接下来,我们...
当我们需要更复杂的分组和汇总信息时,可以使用扩展的聚合功能,如ROLLUP、CUBE以及GROUPING()和GROUPING_ID()函数。这些功能允许我们生成多层次的总计和小计,为数据分析提供了极大的灵活性。 1. ROLLUP子句: ...
然而,GROUP BY还可以与GROUPING、ROLLUP和CUBE运算符结合使用,以实现更复杂的多维度汇总功能。这些高级的汇总方法在数据分析和报表生成中非常有用,尤其是在处理大型数据集时。 GROUPING运算符主要用于识别汇总行...
GROUP BY 子句(rollup, cube, grouping sets)实例说明 GROUP BY 子句是 SQL 语言中用于分组数据的关键字,它可以根据一个或多个列对数据进行分组,并对每个分组应用聚合函数,以便计算和输出所需的结果。GROUP BY...
`GROUPING`函数在`CUBE`和`ROLLUP`操作中用来标识当前行是否是由这些运算符添加的。如果`GROUPING`函数应用于某个特定的列,并返回1,那么表示这个列在当前行的聚合中被忽略,也就是产生了汇总。如果返回0,说明列...
### rollup、cube、grouping sets()的理解及应用 在SQL查询中,当我们需要对数据进行多维度的分组统计时,经常会用到`GROUP BY`子句来完成这一任务。而在更复杂的场景下,为了方便地处理多级别的汇总数据,SQL提供...
### cube与rollup学习总结 在数据库查询语言SQL中,`GROUP BY`子句用于将数据按照一个或...通过本文的学习,相信您已经对`CUBE`、`ROLLUP`和`GROUPING`有了较为全面的了解,希望这些知识点能对您的实际工作有所帮助。
如果某个字段出现在`ROLLUP`或`CUBE`子句中,则对应的`GROUPING`值为1,表示该行为汇总行;否则为0,表示该行为具体的数据行。 例如,在上述查询中,`grouping(index_type)`为0表示此行为具体`index_type`的数据行...
这两种函数主要用于处理复杂的分组情况,尤其是在使用`ROLLUP` 或 `CUBE` 时更为显著。下面将详细介绍这两者的工作原理以及如何在实际查询中使用它们。 ### GROUPING `GROUPING` 函数用于标识每个汇总行是否属于...
### Group By 后使用 Rollup 子句的理解与应用 #### 一、Rollup 子句的基本...通过这些例子可以看出,`ROLLUP` 和 `CUBE` 都能够提供更丰富的数据分组选项,但在具体应用场景中应根据实际需求选择合适的子句来使用。
当我们谈论`WITH CUBE`、`WITH ROLLUP`和`GROUPING`,这些都是在多维数据分析中用于扩展`GROUP BY`功能的高级聚合技术。它们提供了更灵活的数据汇总方式,帮助用户从不同角度查看数据。 首先,让我们深入理解`GROUP...
与`GROUP BY ROLLUP`和`GROUP BY CUBE`相比,`GROUPING SETS`更具有选择性,可以精确地控制生成的汇总组。`ROLLUP`生成所有可能的子集,而`CUBE`则生成所有可能的组合,这两者可能会产生大量的结果,尤其是在处理多...
因此,为了优化性能和减少不必要的结果,我们可能需要配合使用ROLLUP或GROUPING SETS,它们提供了更细粒度的控制来生成特定的分组组合。同时,我们还可以使用HAVING子句来过滤不感兴趣的结果,比如去除包含NULL的...
GROUPING函数可以帮助区分由CUBE生成的NULL值和数据中原本的NULL值,GROUPING函数返回值为1表示是CUBE生成的,为0则表示数据中的原始值。 接着,ROLLUP运算符类似于CUBE,但它生成的结果是分层的,即逐步增加或减少...
- **GROUP BY CUBE(expr1, expr2, ...)**:创建所有可能的组合,包括所有列的汇总行。 - **GROUP BY GROUPING SETS((expr1, expr2, ...), (expr3, expr4, ...))**:创建指定的分组集。 #### 三、`GROUPING`函数的...
group by扩展包括 rollup、cube、grouping、grouping sets的用法和说明