浅谈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



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "with cube和with rollup"是SQL中的聚合函数,用于进行多维度或分组统计查询,生成汇总结果。其中,with cube将按照所有维度生成所有可能的组合,并计算每个组合下的统计值;with rollup则是在原有分组的基础上再增加总计行,统计所有行的汇总值。 ### 回答2: 在SQL语言中,有两个用于处理多维数据的关键字:“with cube”和“with rollup”。 “with cube”用于生成一张包含所有可能值的多维数据表。该关键字能够对查询结果进行全维度聚合,即不仅聚合正常的行和列,还聚合所有维度组合。这种全面的聚合可以帮助用户分析数据,并查看所有不同维度的组合方式。 例如,一个“with cube”语句可能通过以下方式来聚合一个三维数据集: SELECT a, b, c, SUM(d) AS total FROM myTable GROUP BY a, b, c WITH CUBE 结果集将会包括如下聚合: 1. a, b, c组合下的聚合 2. a, b组合下的聚合 3. a, c组合下的聚合 4. b, c组合下的聚合 5. a组合下的聚合 6. b组合下的聚合 7. c组合下的聚合 8. 所有维度的聚合 这些聚合结果将组成包含维度组合下的所有记录的数据集,这可以帮助用户从全面的角度来分析数据。 相比之下,“with rollup”方法对于求取汇总行或列时格外有用。它使用类似“with cube”的聚合方法,但只聚合父级维度或者某一分组维度。当对多个列或行进行聚合计算时,该关键字可以用来创建自定义层次结构并对结果进行总和计算。 例如,一个“with rollup”语句可能按照以下方式来汇总一个二维数据集: SELECT a, b, SUM(c) AS total FROM myTable GROUP BY a, b WITH ROLLUP 结果集包含以下聚合: 1. 按照a, b组合下的聚合 2. 按照a组合下的聚合 3. 所有记录的总和 这些聚合将根据指定的维度对数据集进行汇总,并通过“with rollup”方法计算每个汇总的值。 总而言之,“with cube”和“with rollup”都是SQL中十分有用的聚合方法。它们可以帮助用户分析多维数据,并从多个维度中查看数据组合情况。同时,“with cube”和“with rollup”的使用需要注意控制汇总行或列的层次结构,从而以最佳的方式展示和分析数据。 ### 回答3: WITH CUBE 和 WITH ROLLUP 是 SQL 中的两个高级语句,可以帮助开发人员快速计算聚合数据并促进 BI 报告的生成。两个语句的主要区别在于它们处理数据的方式。 WITH CUBE 语句用于生成多维度的汇总数据。使用该语句时,SQL 引擎将在所有组合中插入空值字段,以便生成所有可能的汇总数据。举个例子,如果我们有客单价和销售订单数据,我们可以使用 WITH CUBE 语句来计算不同城市、不同时间段和不同付款方式的销售汇总数据,而即使这些汇总数据中存在空值,该语句仍会在结果中显示。 WITH ROLLUP 语句则用于在结果集中生成部分汇总数据。语句将在需要时添加附加行并显示适当的小计和总计。例如,当我们使用 WITH ROLLUP 语句计算根据客户类型和地理位置的销售数据时,该语句会将销售数据分为两个或多个类别,并在结果中显示基于类别的小计和最终总计。 通常,选择使用 WITH CUBE 还是 WITH ROLLUP 取决于您希望监控的关键维度。WITH CUBE 在开发多维度报告时更加强大,并且可以在数据集中包含更多的字段或属性,而WITH ROLLUP 则更加适合需要在多个类别级别上查看数据并分析其相关性的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值