[英]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.