oracle group by的按照不同粒度聚合方法

regonly1發表於2012-05-07
一直以為group by 除了rollup和cube可以按照子句中指定的欄位進行不同粒度的聚合,沒有其他的方法了。今天因為groupby的bug(hash group b y)而發現了另一種方法,如下例:
with tmp as(
    select '0001' userno, '01' pno from dual union all
    select '0001' userno, '01' pno from dual union all
    select '0001' userno, '02' pno from dual union all
    select '0002' userno, '01' pno from dual union all
    select '0002' userno, '03' pno from dual union all
    select '0003' userno, '03' pno from dual)
select grouping_id(userno, pno) gid, userno, pno, count(1) cnt
  from tmp
 group by grouping sets((), (userno), (userno, pno))
其意義在於,我如果需要按照指定粒度進行彙總,而不用rollup或cube那種全組合的粒度,就可以用這種方式。

參考文件連線:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-722900/,如需轉載,請註明出處,否則將追究法律責任。

相關文章