请考虑以下几点:
customer, package
a, pack1
a, pack2
b, pack1
c, pack1
c, pack2
d, pack3
d, pack2
d, pack1
e, pack1
e, pack3
f, pack1
f, pack2
f, pack3
我需要的输出是,有多少独特的客户有一个特定的包组合:
pack1, 1
(pack1, pack2), 2
(pack1, pack2, pack3), 2
(pack1, pack3), 1
当我将表导出到一个电子表格(或者使用GNU datamash)并制作一个pivot表并对此做一些工作时,我可以得到我需要的东西,但是我需要手工计算。所以我一直认为这应该更简单(不将数据导出到透视表)。
任何指点都是值得赞赏的(已经晚了)。
有一个SQLFiddle:http://sqlfiddle.com/#!9/7bb98/1
最佳答案
您需要将每个客户的包连接成一个字符串(按包排序),然后可以按连接的字符串计数:
对于Postgres:
select packs, count(*)
from (
select cust, string_agg(package,',' order by package) packs
from Table1
group by cust
) p
group by packs
;
结果
| packs | count |
|-------------------|-------|
| pack1,pack3 | 1 |
| pack1,pack2 | 2 |
| pack1,pack2,pack3 | 2 |
| pack1 | 1 |
SQLFiddle Demo
关于postgresql - 计算每个用户的包(行值)组合(唯一值),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47480966/