在Oracle中,我们可能比较习惯用Group by子句,不过可能很多人不知道,在Group by字句中可以进行超级聚合分组检索,这个时候就利用了2个关键字,一个Rollup,一个是cube。
Rollup是按照Group by的条件从右到左进行分组,也就是说如果有2个group by条件,会按照右边只有1个条件的时候group by一次,然后再按照右边2个条件一起group by。
而cube则更全面,除了从右往左进行分别分组以外,还会从左往右再分组一次,所以cube以后的结果集更多。两个分组语法如下所示。
SELECT
COL1,
COL2,
SUM (COL3)
FROM
TBL
GROUP BY ROLLUP(COL1, COL2)
COL1,
COL2,
SUM (COL3)
FROM
TBL
GROUP BY ROLLUP(COL1, COL2)
SELECT
COL1,
COL2,
SUM (COL3)
FROM
TBL
GROUP BY CUBE(COL1, COL2)
COL1,
COL2,
SUM (COL3)
FROM
TBL
GROUP BY CUBE(COL1, COL2)