>데이터 베이스 >MySQL 튜토리얼 >Oracle group by的按照不同粒度聚合方法

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

WBOY
WBOY원래의
2016-06-07 17:20:201161검색

一直以为group by 除了rollup和cube可以按照子句中指定的字段进行不同粒度的聚合,没有其他的方法了。今天因为groupby的bug(has

一直以为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那种全组合的粒度,,就可以用这种方式。

linux

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:MySQL缓存研究다음 기사:关于Oracle 11g动态采样