欢迎来到天天文库
浏览记录
ID:42625725
大小:17.79 KB
页数:10页
时间:2019-09-19
《ROLLUP和CUBE的使用 及 区别》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ORACLEROLLUP和CUBE的使用及区别ROLLUP,是GROUPBY子句的一种扩展,可以为每个分组返回小计记录以及为所有分组返回总计记录。CUBE,也是GROUPBY子句的一种扩展,可以返回每一个列组合的小计记录,同时在末尾加上总计记录。在文章的最后附上了相关表和记录创建的脚本。一、ROLLUP的使用:1、向ROLLUP传递一列SQL>selectdivision_id,sum(salary) 2 fromemployees2 3 groupbyrollup(division_id) 4
2、 orderbydivision_id;DIVSUM(SALARY)--------------BUS 1610000OPE 1320000SAL 4936000SUP 1015000 8881000SQL>再来看一下如果使用普通的GROUPBY,而没有ROLLUP是个什么情况SQL>selectdivision_id,sum(salary) 2 fromemployees2 3 groupbydivision_id 4 orderbydivision_id;
3、DIVSUM(SALARY)--------------BUS 1610000OPE 1320000SAL 4936000SUP 1015000可以看到,缺少了最后的统计信息。2、向ROLLUP传递多列SQL>selectdivision_id,job_id,sum(salary) 2 fromemployees2 3 groupbyrollup(division_id,job_id) 4 orderbydivision_id,job_id;DIVJOBSUM(SALAR
4、Y)-----------------BUSMGR 530000BUSPRE 800000BUSWOR 280000BUS 1610000OPEENG 245000OPEMGR 805000OPEWOR 270000OPE 1320000SALMGR 4446000SALWOR 490000SAL 4936000DIVJOBSUM(SALARY)-----------------SUPMGR
5、 465000SUPTEC 115000SUPWOR 435000SUP 1015000 888100016rowsselected.可以看到,除了在最后有一个求和记录外,每个division_id分组也会有一个求和记录。那么我们现在交换一下ROLLUP中数据列的顺序,看看结果怎样SQL>selectjob_id,division_id,sum(salary) 2 fromemployees2 3 groupbyrollup(job_id,
6、division_id) 4 orderbyjob_id,division_id;JOBDIVSUM(SALARY)-----------------ENGOPE 245000ENG 245000MGRBUS 530000MGROPE 805000MGRSAL 4446000MGRSUP 465000MGR 6246000PREBUS 800000PRE 800000TECSUP 115000TE
7、C 115000JOBDIVSUM(SALARY)-----------------WORBUS 280000WOROPE 270000WORSAL 490000WORSUP 435000WOR 1475000 888100017rowsselected.结果类似,只不过是每一个job_id分组有一个求和记录罢了。二、CUBE的使用3、向CUBE传递一列SQL>selectdivision_id,sum(salar
8、y) 2 fromemployees2 3 groupbycube(division_id) 4 orderbydivision_id;DIVSUM(SALARY)--------------BUS 1610000OPE 1320000SAL 4936000SUP 1015000 8881000好像和ROLLUP没什么区别哦,呵呵,继续往下看。4、向CUBE传递多列SQL>selectjob_id,division_id,sum(salary) 2 frome
此文档下载收益归作者所有