这是我的数据示例:
我正在尝试编写一个查询,返回 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)
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