Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 计算每个用户的包组合(行值)(唯一值)_Postgresql - Fatal编程技术网

Postgresql 计算每个用户的包组合(行值)(唯一值)

Postgresql 计算每个用户的包组合(行值)(唯一值),postgresql,Postgresql,考虑以下几点: 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 我需要的输出是,有多少独特的客户拥有特定的软件包组合: 当我将表导出到电子表格(或使用GNU datamash)并制作一个数据透视表并对其进行一些处理时,我可以得到我需要的东西,但我需要手工计算。因此我一直认为这

考虑以下几点:

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
我需要的输出是,有多少独特的客户拥有特定的软件包组合:

当我将表导出到电子表格(或使用GNU datamash)并制作一个数据透视表并对其进行一些处理时,我可以得到我需要的东西,但我需要手工计算。因此我一直认为这应该更简单(无需将数据导出到透视表)

感谢您的指点(已经晚了)


有一个SQLFiddle:

您需要为每个客户将包连接成一个字符串(按包排序),然后您可以根据连接的字符串进行计数:

对于博士后:

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 |

您需要为每个客户将软件包连接成一个字符串(按软件包排序),然后您可以根据连接的字符串进行计数:

对于博士后:

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 |

太棒了,谢谢!我只需要将string_agg(package…)更改为string_agg(package::character variabling…)。例如,我并不完全真实,因为我的包实际上也是整数。但有了这个小小的增加,它的效果就棒极了!太棒了,谢谢!我只需要将string_agg(package…)更改为string_agg(package::character variabling…)。例如,我并不完全真实,因为我的包实际上也是整数。但有了这个小小的增加,它的效果就棒极了!