连接分组
- 连接分组提供一种简明的方式来生成有用的分组组合
- 为了指定连接分组集合, 用逗号分开多重分组集合, ROLLUP, 和CUBE操作, 以便ORACLE服务器将它们组合在一个单个的GROUP BY 子句中
- 分组是每个分组集合交叉乘积的结果
GROUP BY GROUPING SETS(a,b), GROUPING SETS(c,d)
前面的SQL定义下面的分组:
(a,c), (a,d), (b,c), (b,d)
分组集的串联是非常有用的, 因为
- 开发查询容易: 你不需要手工列举所有分组
- 被应用程序使用: 由OLAD应用程序产生的SQL常常包括串联的分组集, 用每个分组集定义每一维需要的分组
幻灯片中的例子:
ROLLUP(JOB_ID) = (JOB_ID,NULL), CUBE(MANAGER_ID) = (MANAGER_ID, NULL)
所以
GROUP BY DEPARTMENT_ID, ROLLUP(JOB_ID), CUBE(MANAGER_ID)
就等价于DEPARTMENT_ID*(JOB_ID,NULL)*(MANAGER_ID,NULL)
最后的结果:
(department_id,job_id,manager_id),(department_id,null,manager_id),(department_id,job_id,null),(department_id,null,null)
=>
(department_id,job_id,manager_id),(department_id,manager_id),(department_id,job_id),(department_id);