最近这段时间一直在看SQL Server视频,虽然了解了SQL Server运行环境、语言基础和设计基础,但还没有真正的转化为自己的知识。一方面,是刚接触数据库,另一方面,就是自己只是看视频、记笔记,没有去思考和总结。下面是我对group by字句中with cube和with rollup的总结:
当需要对数据库数据进行分类统计的时候,往往会用上group by进行分组。而在group by后面还可以加入with cube和with rollup等关键字对数据进行汇总。那什么时候用with cube?什么时候用with rollup呢?
一、两者的区别
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
二、两者的用法(实例说明)
CUBE:除了返回GROUP BY子句指定的列外,还返回按组统计的行。返回的结果先按分组的第一个条件排序显示,再按第二个条件列排序显示,以此类推。统计行包括了GROUP BY 子句指定的列的各种组合的数据统计
Select 所属部门,性别,AVG(年龄) FROM 导师表 Group by 所属部门,性别 With cube
所属部门 |
性别 |
年龄 |
纪律部 |
男 |
24 |
纪律部 |
女 |
22 |
纪律部 |
null |
23纪律部成员的平均年龄 |
学习部 |
男 |
25 |
学习部 |
女 |
22 |
学习部 |
null |
24学习部成员的平均年龄 |
博客检查委员会 |
男 |
24 |
博客检查委员会 |
女 |
22 |
博客检查委员会 |
null |
23博委所有成员的平均年龄 |
null |
null |
23所有成员的平均年龄 |
null |
男 |
22所有女成员的平均年龄 |
null |
女 |
24所有男成员的平均年龄 |
ROLLUP:与CYBE不同的是,此选项对GROUP BY子句中的列顺序敏感,它只返回第一个分组条件指定的列的统计行,改变列的顺序会使返回的结果的行数发生改变。
Select 所属部门,性别,AVG(年龄) FROM 导师表 Group by 所属部门,性别 With
rollup
所属部门 |
性别 |
年龄 |
纪律部 |
男 |
24 |
纪律部 |
女 |
22 |
纪律部 |
null |
23纪律部成员的平均年龄 |
学习部 |
男 |
25 |
学习部 |
女 |
22 |
学习部 |
null |
24学习部成员的平均年龄 |
博客检查委员会 |
男 |
24 |
博客检查委员会 |
女 |
22 |
博客检查委员会 |
null |
23博委所有成员的平均年龄 |
null |
null |
23所有成员的平均年龄 |
null |
男 |
22 |
null |
女 |
24 |
还有一个比较简单的实例,拿来和大家分享一下:
简单表 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
- 7楼wang13667539325前天 20:04
- 好快呀,小青。 。。。。。。华英
- Re: gxq741718618昨天 08:00
- 嗯,一步步来,别着急。
- 6楼xjc12780032623天前 14:59
- 先学习啦!
- Re: gxq7417186183天前 14:59
- 嗯,一起学习!
- 5楼wangyongxia9213天前 14:58
- 不错哦!
- Re: gxq7417186183天前 14:59
- 嗯学习中,希望可以 走好每一步
- 4楼lfmilaoshi3天前 10:42
- 基础。。。很重要。。。米老师
- Re: gxq7417186183天前 11:19
- 嗯,积累中
- 3楼wss7846161585天前 19:43
- 技术的领导者!
- Re: gxq7417186184天前 15:59
- 嗯,积累中,一起加油哦!
- 2楼zuozuo12455天前 14:35
- 鼓掌!
- Re: gxq7417186185天前 14:36
- 嗯,一起努力!
- 1楼liushuijinger5天前 00:19
- 积累
- Re: gxq7417186185天前 09:39
- 嗯,积累中,谢谢师哥