最近这段时间一直在看SQLServer视频,虽然了解了SQLServer运行环境、语言基础和设计基础,但还没有真正的转化为自己的知识。一方面,是刚接触数据库,另一方面,就是自己只是看视频、记笔记,没有去思考和总结。下面是我对groupby字句中withcube和withrollup的总结:
当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。而在groupby后面还可以加入withcube和withrollup等关键字对数据进行汇总。那什么时候用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
分享到:
相关推荐
`CUBE`和`ROLLUP`是`WITH`子句中的两个特殊运算符,它们主要用于多维度数据分析和聚合操作,通常在`GROUP BY`语句中配合使用。 1. **CUBE运算符**: `CUBE`生成的结果集包含了所有可能的子集,即所选列中值的所有...
### cube与rollup学习总结 在数据库查询语言SQL中,`GROUP BY`子句用于将数据按照一个或多个列进行分组,以便于对每个分组执行聚合操作(如求和、平均值等)。而在`GROUP BY`的基础上,`CUBE`和`ROLLUP`两个关键词...
这意味着,对于上述的地区、城市和部门的例子,CUBE会生成所有可能的三列组合,包括地区与城市、地区与部门、城市与部门,以及所有单列、两列和全列的汇总。 语法结构如下: ```sql SELECT column1, column2, ..., ...
SQL Server中的用法为group by colomn with [rollup|cube],首先要弄明白rollup 和cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而 rollup 为分层次展现,cube 为展现列中所有层次...
#### Rollup 与 Cube 的概念介绍 - **Rollup**:用于生成包含所有可能的汇总级别的分组结果集。例如,在两个字段`部门`和`姓名`上使用`ROLLUP`,将会返回所有部门和姓名的组合,每个部门下所有员工的总和,以及整个...
而在GROUP BY的基础上,Oracle数据库提供了两种高级分组功能:ROLLUP和CUBE,它们允许我们更灵活地生成汇总数据。 1. ROLLUP(滚联回溯): ROLLUP是GROUP BY的一个扩展,它不仅返回每个单独的分组结果,还会生成...
sql学习 cube之比rollup粒度更细的展现.sql
### Oracle中的ROLLUP与CUBE使用详解 在Oracle数据库中,`ROLLUP`与`CUBE`是非常重要的分组函数,被广泛应用于数据汇总、数据分析等场景中。这两个功能可以帮助开发人员快速地对数据进行多维度分析,是开发人员必备...
本篇将重点探讨Hive中的窗口函数以及如何利用它们进行cube和rollup操作。这些功能极大地增强了数据分析的能力,使得我们可以对数据进行更复杂的聚合。 窗口函数在SQL中是一种非常强大的工具,它允许我们在一个数据...
CUBE与ROLLUP类似,但提供了所有可能的列组合的小计,不仅包括逐级上升的分组,还包括所有可能的交叉分组。例如,如果我们只关心部门和职位的交叉汇总,CUBE可以做到: ```sql SELECT DIVISION, JOB_ID, SUM...
本博客简单介绍一下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 子句是 SQL 语言中用于分组数据的关键字,它可以根据一个或多个列对数据进行分组,并对每个分组应用聚合函数,以便计算和输出所需的结果。GROUP BY...
### 使用ROLLUP函数生成报表的小计、合计 在数据库查询操作中,经常需要对数据进行分组统计,并在此基础上进一步生成包含小计和总计的报表。这种需求在人力资源管理系统(如文中提到的eHR系统)以及其他各类业务...
### rollup cube grouping sets 的用法 在数据库查询语言 SQL 中,`ROLLUP`, `CUBE`, 和 `GROUPING SETS` 是三个重要的概念,它们主要用于处理多维度数据的汇总和分组问题,使得数据分析更加灵活高效。接下来,我们...
当我们谈论`WITH CUBE`、`WITH ROLLUP`和`GROUPING`,这些都是在多维数据分析中用于扩展`GROUP BY`功能的高级聚合技术。它们提供了更灵活的数据汇总方式,帮助用户从不同角度查看数据。 首先,让我们深入理解`GROUP...
CUBE在GROUP BY子句中使用,并且需要与WITH CUBE关键字一起。这将生成所有维度列的可能组合,以及这些组合对应的基础行的聚合值。例如,如果你有产品(Item)和颜色(Color)两个维度,CUBE将返回所有可能的Item-...
最后,我们还需要了解 `ROLLUP` 与另一个类似的子句 `CUBE` 之间的区别。`CUBE` 子句与 `ROLLUP` 类似,但是它会生成所有可能的分组组合,而不仅仅是按照层次递减的方式。例如: - 对于 `GROUP BY CUBE(A, B)`,...
为了更深入地理解`ROLLUP`,我们可以将其与`CUBE` 进行对比。`CUBE` 会生成所有可能的列组合,包括原始的`GROUP BY` 列及其所有的超集。这意味着`CUBE` 会产生更多的结果,包括一些可能没有实际意义的组合(如空的...