?????? ? ? 最近这段时间一直在看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
女
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 ?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!