`
wsql
  • 浏览: 12034505 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

浅谈with cube与with rollup之区别

 
阅读更多

最近这段时间一直在看SQLServer视频,虽然了解了SQLServer运行环境、语言基础和设计基础,但还没有真正的转化为自己的知识。一方面,是刚接触数据库,另一方面,就是自己只是看视频、记笔记,没有去思考和总结。下面是我对groupby字句中withcubewithrollup的总结:

当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。而在groupby后面还可以加入withcubewithrollup等关键字对数据进行汇总。那什么时候用withcube?什么时候用withrollup?

一、两者的区别
CUBE
生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP
生成的结果集显示了所选列中值的某一层次结构的聚合。

二、两者的用法(实例说明)

CUBE:除了返回GROUPBY子句指定的列外,还返回按组统计的行。返回的结果先按分组的第一个条件排序显示,再按第二个条件列排序显示,以此类推。统计行包括了GROUPBY子句指定的列的各种组合的数据统计

Select所属部门,性别,AVG(年龄)FROM 导师表Groupby所属部门,性别Withcube

所属部门

性别

年龄

纪律部

24

纪律部

22

纪律部

null

23纪律部成员的平均年龄

学习部

25

学习部

22

学习部

null

24学习部成员的平均年龄

博客检查委员会

24

博客检查委员会

22

博客检查委员会

null

23博委所有成员的平均年龄

null

null

23所有成员的平均年龄

null

22所有女成员的平均年龄

null

24所有男成员的平均年龄

ROLLUP:CYBE不同的是,此选项对GROUPBY子句中的列顺序敏感,它只返回第一个分组条件指定的列的统计行,改变列的顺序会使返回的结果的行数发生改变。

Select所属部门,性别,AVG(年龄)FROM导师表Groupby所属部门,性别With rollup

所属部门

性别

年龄

纪律部

24

纪律部

22

纪律部

null

23纪律部成员的平均年龄

学习部

25

学习部

22

学习部

null

24学习部成员的平均年龄

博客检查委员会

24

博客检查委员会

22

博客检查委员会

null

23博委所有成员的平均年龄

null

null

23所有成员的平均年龄

null

22

null

24

注: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



分享到:
评论

相关推荐

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

    `CUBE`和`ROLLUP`是`WITH`子句中的两个特殊运算符,它们主要用于多维度数据分析和聚合操作,通常在`GROUP BY`语句中配合使用。 1. **CUBE运算符**: `CUBE`生成的结果集包含了所有可能的子集,即所选列中值的所有...

    cube与rollup学习总结

    ### cube与rollup学习总结 在数据库查询语言SQL中,`GROUP BY`子句用于将数据按照一个或多个列进行分组,以便于对每个分组执行聚合操作(如求和、平均值等)。而在`GROUP BY`的基础上,`CUBE`和`ROLLUP`两个关键词...

    Oracle ROLLUP和CUBE 用法

    这意味着,对于上述的地区、城市和部门的例子,CUBE会生成所有可能的三列组合,包括地区与城市、地区与部门、城市与部门,以及所有单列、两列和全列的汇总。 语法结构如下: ```sql SELECT column1, column2, ..., ...

    SQL语句中Group BY 和Rollup以及cube用法.txt

    SQL Server中的用法为group by colomn with [rollup|cube],首先要弄明白rollup 和cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而 rollup 为分层次展现,cube 为展现列中所有层次...

    SQL语句中Group BY 和Rollup以及cube用法

    #### Rollup 与 Cube 的概念介绍 - **Rollup**:用于生成包含所有可能的汇总级别的分组结果集。例如,在两个字段`部门`和`姓名`上使用`ROLLUP`,将会返回所有部门和姓名的组合,每个部门下所有员工的总和,以及整个...

    group by分组函数之rollup与cube用法1

    而在GROUP BY的基础上,Oracle数据库提供了两种高级分组功能:ROLLUP和CUBE,它们允许我们更灵活地生成汇总数据。 1. ROLLUP(滚联回溯): ROLLUP是GROUP BY的一个扩展,它不仅返回每个单独的分组结果,还会生成...

    sql学习 cube之比rollup粒度更细的展现.sql

    sql学习 cube之比rollup粒度更细的展现.sql

    rollup及cube的使用

    ### Oracle中的ROLLUP与CUBE使用详解 在Oracle数据库中,`ROLLUP`与`CUBE`是非常重要的分组函数,被广泛应用于数据汇总、数据分析等场景中。这两个功能可以帮助开发人员快速地对数据进行多维度分析,是开发人员必备...

    Hive开窗函数测试-cube,rollup

    本篇将重点探讨Hive中的窗口函数以及如何利用它们进行cube和rollup操作。这些功能极大地增强了数据分析的能力,使得我们可以对数据进行更复杂的聚合。 窗口函数在SQL中是一种非常强大的工具,它允许我们在一个数据...

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

    CUBE与ROLLUP类似,但提供了所有可能的列组合的小计,不仅包括逐级上升的分组,还包括所有可能的交叉分组。例如,如果我们只关心部门和职位的交叉汇总,CUBE可以做到: ```sql SELECT DIVISION, JOB_ID, SUM...

    Oracle分组函数之ROLLUP的基本用法

    本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as select * from scott.dept; create table emp as select * from ...

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

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

    使用ROLLUP函数生成报表的小计、合计

    ### 使用ROLLUP函数生成报表的小计、合计 在数据库查询操作中,经常需要对数据进行分组统计,并在此基础上进一步生成包含小计和总计的报表。这种需求在人力资源管理系统(如文中提到的eHR系统)以及其他各类业务...

    rollup cube grouping sets的用法

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

    grouping 解释及演示.rar

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

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

    CUBE在GROUP BY子句中使用,并且需要与WITH CUBE关键字一起。这将生成所有维度列的可能组合,以及这些组合对应的基础行的聚合值。例如,如果你有产品(Item)和颜色(Color)两个维度,CUBE将返回所有可能的Item-...

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

    最后,我们还需要了解 `ROLLUP` 与另一个类似的子句 `CUBE` 之间的区别。`CUBE` 子句与 `ROLLUP` 类似,但是它会生成所有可能的分组组合,而不仅仅是按照层次递减的方式。例如: - 对于 `GROUP BY CUBE(A, B)`,...

    ROLLUP的数据统计效果

    为了更深入地理解`ROLLUP`,我们可以将其与`CUBE` 进行对比。`CUBE` 会生成所有可能的列组合,包括原始的`GROUP BY` 列及其所有的超集。这意味着`CUBE` 会产生更多的结果,包括一些可能没有实际意义的组合(如空的...

Global site tag (gtag.js) - Google Analytics