如何获取所有可能的捆绑包

问题描述 投票:0回答:1

这是我的数据示例:

我正在尝试编写一个查询,返回 Insurance_product 的所有可能的捆绑包以及有多少客户拥有相同的捆绑包。

这是我写的查询,但我只在一个包中获得 2 个值(我还需要获得船+房子+汽车+生活):

select concat(insuranct_product1,insuranct_product2) as bundle_package,
count(distinct customer_id) as customer_count
from(
select t1.customer_id, t1.insuranct_product,t2.insuranct_product
from customers t1
join 
customers t2
on t1.customer_id=t2.customer_id
where t1.insuranct_product<t2.insuranct_product
) group by concat(insuranct_product1,insuranct_product2)
sql oracle plsql
1个回答
0
投票

GROUP BY customer_id HAVING COUNT(DISTINCT insurance_product) > 1
查找包含多个产品的捆绑包,然后
LISTAGG
将它们聚合在一起。然后,您可以按捆绑聚合来计算每个捆绑的客户数量:

SELECT bundle,
       COUNT(*) AS customer_count
FROM   (
  SELECT customer_id,
         LISTAGG(DISTINCT insurance_product, ',')
           WITHIN GROUP (ORDER BY insurance_product)
           AS bundle
  FROM   customers
  GROUP BY customer_id
  HAVING COUNT(DISTINCT insurance_product) > 1
)
GROUP BY bundle
© www.soinside.com 2019 - 2024. All rights reserved.