最近这段时间一直在看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
分享到:
相关推荐
关于with cube ,with rollup 和 grouping 通过查看sql 2005的帮助文档找到了CUBE 和 ROLLUP 之间的具体区别: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。ROLLUP 生成的结果集显示了所选列中值的某一层次...
NULL 博文链接:https://dolphin-ygj.iteye.com/blog/416356
深入介结分析函数的内部实现cube,rollup,grouping,里面有具体的例子来说明,方便大家理解学习
sql学习 cube之比rollup粒度更细的展现.sql
本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as select * from scott.dept; create table emp as select * from ...
oracle rollup及cube的使用,开发人员必备的资料
GROUP BY子句(rollup,cube,grouping sets)实例说明
rollup cube grouping sets的用法 详细,讲述与实例想结合
SQL语句中Group BY 和Rollup以及cube用法
oracle 聚合函数的扩展使用 1.ROLLUP子句 ROLLUP是GROUP BY子句的扩展,它是为每一个分组返回一条合计记录,并为全部分组返回总计。...3.GROUPING()函数与ROLLUP、CUBE的结合使用 4.GROUPING_ID()函数的使用
SQL Server中的用法为group by colomn with [rollup|cube],首先要弄明白rollup 和cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而 rollup 为分层次展现,cube 为展现列中所有层次...
union,cube,rollup,cumpute运算符的使用技巧。
使用ROLLUP函数生成报表的小计、合计 这个函数很不错 使用的范围其实蛮广的
NULL 博文链接:https://wankunde.iteye.com/blog/1879565
rollup,cube,grouping sets()的个人理解 其中关于这三个的各种情况,举例论证这三个的区别。
SQL 关于with cube,with rollup 和 grouping
用union all方式对上面代码改写如下:SQL> select group_id,job,sum(salary) from group_test 2 g
rollup.js 是下一代的 JavaScript 模块化工具,使用 ES2015 模块编写你的应用或者库,可以高效的绑定他们成为单个文件,在浏览器或者 Node.js 中使用,甚至是一些高级特性的绑定,比如 bindings 和 cycles。...