繁体   English   中英

使用Group By和ListAgg获取汇总信息

[英]Using Group By and ListAgg to get aggregate information

在Oracle中,从正在使用的表获取汇总值时遇到问题。 我在下面提供示例。 但是从综合的角度来看,我什至不知道从哪里开始。 我想我需要同时使用大小写和having的某种组合,但是我不确定该如何表达。

我的桌子看起来像这样:

    Record#  Value
    111111   KA
    111111   RA
    111111   HA
    111112   KA
    111113   RA
    111114   HA
    111114   RA

所需的结果。 我想得到的是记录数量,其中:

    # Records only have KA only.
    # Records only have RA only.
    # Records only have RH only.
    # Records only have HA only.  
    # Records only have KA and RA.
    # Records only have KA and RH.
    # Records only have KA, RA and RH.
    and etc. 

这些“值”的数量有限,但是我那里有超过1,000,000条记录,我需要了解这些记录的组成。

我会为此创建一个小提琴,但目前似乎已被打破。

 create table myTable(record  varchar2(100), value varchar2(100));
 insert into myTable(record ,value) values(111111,'KA');
 insert into myTable(record ,value) values(111111,'RA');
 insert into myTable(record ,value) values(111111,'HA');
 insert into myTable(record ,value) values(111112,'KA');
 insert into myTable(record ,value) values(111113,'RA');
 insert into myTable(record ,value) values(111114,'HA');
 insert into myTable(record ,value) values(111114,'RA');

编辑*使用@ Gordon-Linoff建议的内容后,

 select valuelist, count(*) as cnt
 from (select record, listagg(value, ',') within group (order by value) as valuelist, count(*) as cnt
       from mytable
       group by record
      ) r
 group by valuelist
 order by cnt, valuelist; 

我得到的混合结果看起来像这样

 KA 2
 RA 3
 HA 2

代替

 KA, RA, HA 2
 KA 1
 RA 1
 HA, RA 1

您可以通过使用listagg()组合字段,然后按结果进行汇总来做到这一点:

select valuelist, count(*) as cnt
from (select record, listagg(value, ',') within group (order by value) as valuelist, count(*) as cnt
      from mytable
      group by record
     ) r
group by valuelist
order by cnt, valuelist;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM