`
中国大人
  • 浏览: 11219 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

grouping rollup cube

阅读更多

用 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 用法

    Oracle数据库中的ROLLUP和CUBE是两种用于生成数据汇总的SQL操作,它们在数据分析和报告制作中非常有用。本文将详细介绍这两个概念以及如何在实际应用中使用它们。 首先,我们来理解`ROLLUP`。ROLLUP操作是GROUP BY...

    rollup cube grouping sets的用法

    ### rollup cube grouping sets 的用法 在数据库查询语言 SQL 中,`ROLLUP`, `CUBE`, 和 `GROUPING SETS` 是三个重要的概念,它们主要用于处理多维度数据的汇总和分组问题,使得数据分析更加灵活高效。接下来,我们...

    oracle中聚合函数的扩展使用(ROLLUP CUBE、GROUPING()函数与ROLLUP、CUBE的结合使用等)

    当我们需要更复杂的分组和汇总信息时,可以使用扩展的聚合功能,如ROLLUP、CUBE以及GROUPING()和GROUPING_ID()函数。这些功能允许我们生成多层次的总计和小计,为数据分析提供了极大的灵活性。 1. ROLLUP子句: ...

    SQLServer中汇总功能的使用GROUPING,ROLLUP和CUBE

    然而,GROUP BY还可以与GROUPING、ROLLUP和CUBE运算符结合使用,以实现更复杂的多维度汇总功能。这些高级的汇总方法在数据分析和报表生成中非常有用,尤其是在处理大型数据集时。 GROUPING运算符主要用于识别汇总行...

    GROUP BY子句(rollup,cube,grouping sets)实例说明

    GROUP BY 子句(rollup, cube, grouping sets)实例说明 GROUP BY 子句是 SQL 语言中用于分组数据的关键字,它可以根据一个或多个列对数据进行分组,并对每个分组应用聚合函数,以便计算和输出所需的结果。GROUP BY...

    Sql学习第四天——SQL 关于with cube,with rollup和grouping解释及演示

    `GROUPING`函数在`CUBE`和`ROLLUP`操作中用来标识当前行是否是由这些运算符添加的。如果`GROUPING`函数应用于某个特定的列,并返回1,那么表示这个列在当前行的聚合中被忽略,也就是产生了汇总。如果返回0,说明列...

    rollup,cube,grouping sets()的个人理解

    ### rollup、cube、grouping sets()的理解及应用 在SQL查询中,当我们需要对数据进行多维度的分组统计时,经常会用到`GROUP BY`子句来完成这一任务。而在更复杂的场景下,为了方便地处理多级别的汇总数据,SQL提供...

    cube与rollup学习总结

    ### cube与rollup学习总结 在数据库查询语言SQL中,`GROUP BY`子句用于将数据按照一个或...通过本文的学习,相信您已经对`CUBE`、`ROLLUP`和`GROUPING`有了较为全面的了解,希望这些知识点能对您的实际工作有所帮助。

    rollup及cube的使用

    如果某个字段出现在`ROLLUP`或`CUBE`子句中,则对应的`GROUPING`值为1,表示该行为汇总行;否则为0,表示该行为具体的数据行。 例如,在上述查询中,`grouping(index_type)`为0表示此行为具体`index_type`的数据行...

    grouping or grouping_id in ORACLE

    这两种函数主要用于处理复杂的分组情况,尤其是在使用`ROLLUP` 或 `CUBE` 时更为显著。下面将详细介绍这两者的工作原理以及如何在实际查询中使用它们。 ### GROUPING `GROUPING` 函数用于标识每个汇总行是否属于...

    group by 后 使用 rollup 子句 总结.doc

    ### Group By 后使用 Rollup 子句的理解与应用 #### 一、Rollup 子句的基本...通过这些例子可以看出,`ROLLUP` 和 `CUBE` 都能够提供更丰富的数据分组选项,但在具体应用场景中应根据实际需求选择合适的子句来使用。

    grouping 解释及演示.rar

    当我们谈论`WITH CUBE`、`WITH ROLLUP`和`GROUPING`,这些都是在多维数据分析中用于扩展`GROUP BY`功能的高级聚合技术。它们提供了更灵活的数据汇总方式,帮助用户从不同角度查看数据。 首先,让我们深入理解`GROUP...

    Oracle中用GROUPING SETS分组自定义汇总

    与`GROUP BY ROLLUP`和`GROUP BY CUBE`相比,`GROUPING SETS`更具有选择性,可以精确地控制生成的汇总组。`ROLLUP`生成所有可能的子集,而`CUBE`则生成所有可能的组合,这两者可能会产生大量的结果,尤其是在处理多...

    《Pro Oracle SQL》Chapter7 Advanced Grouping -- 7.5Putting CUBE To Work

    因此,为了优化性能和减少不必要的结果,我们可能需要配合使用ROLLUP或GROUPING SETS,它们提供了更细粒度的控制来生成特定的分组组合。同时,我们还可以使用HAVING子句来过滤不感兴趣的结果,比如去除包含NULL的...

    SQLSERVER中union,cube,rollup,cumpute运算符使用说明

    GROUPING函数可以帮助区分由CUBE生成的NULL值和数据中原本的NULL值,GROUPING函数返回值为1表示是CUBE生成的,为0则表示数据中的原始值。 接着,ROLLUP运算符类似于CUBE,但它生成的结果是分层的,即逐步增加或减少...

    oracle中的grouping

    - **GROUP BY CUBE(expr1, expr2, ...)**:创建所有可能的组合,包括所有列的汇总行。 - **GROUP BY GROUPING SETS((expr1, expr2, ...), (expr3, expr4, ...))**:创建指定的分组集。 #### 三、`GROUPING`函数的...

    group by的扩展

    group by扩展包括 rollup、cube、grouping、grouping sets的用法和说明

Global site tag (gtag.js) - Google Analytics