首页 > 代码库 > PLSQL_基础系列2_分组函数GROUP BY / ROLLUP / CUBE

PLSQL_基础系列2_分组函数GROUP BY / ROLLUP / CUBE

2014-11-30 BaoXinjian

一、摘要


ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集。

 

1. 下面是 CUBE 和 ROLLUP 之间的具体区别:

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。

ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

 

2. ROLLUP 优点:

(1). ROLLUP 返回单个结果集,而 COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。

(2). ROLLUP 可以在服务器游标中使用,而 COMPUTE BY 则不可以。

(3). 有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。

 

二、创建测试数据


 

1. 创建资料

CREATE TABLE DEPARTMENT(   DEPARTMENT   CHAR (10),   EMPLOYEE     CHAR (6),   SALARY       INT); BEGIN INSERT INTO DEPARTMENT SELECT A,ZHANG,100 FROM DUAL; INSERT INTO DEPARTMENT SELECT A,LI,   200 FROM DUAL; INSERT INTO DEPARTMENT SELECT A,WANG, 300 FROM DUAL; INSERT INTO DEPARTMENT SELECT A,ZHAO, 400 FROM DUAL; INSERT INTO DEPARTMENT SELECT A,DUAN, 500 FROM DUAL; INSERT INTO DEPARTMENT SELECT B,DUAN, 600 FROM DUAL; INSERT INTO DEPARTMENT SELECT B,DUAN, 700 FROM DUAL;END;

 

 

2. 查看资料

 

三、ROLLUP案例


ROLLUP结果集中多了三条汇总信息:即部门A的合计,部门B的合计以及总合计。其中将部门B中的DUAN合计

 

四、CUBE案例


CUBE的结果集是在 ROLLUP结果集的基础上多了5行,这5行相当于在ROLLUP结果集上在union 上以员工 (即CUBE)为 GROUP BY的结果

 

Thanks and Regards

PLSQL_基础系列2_分组函数GROUP BY / ROLLUP / CUBE