如何获取购买多种产品的客户?SQL查询求助
解决方法
要筛选出购买了多种产品(这里同时包含PRODUCT_1和PRODUCT_2)的客户的所有交易记录,你需要先识别出符合条件的客户,再关联原表获取对应的记录。以下是两种可行的实现方式:
方法1:子查询筛选符合条件的客户
先找出同时购买了PRODUCT_1和PRODUCT_2的客户ID,再用这些ID过滤原表:
SELECT t.cust, t.prod FROM your_table t WHERE t.cust IN ( SELECT cust FROM your_table WHERE prod IN ('PRODUCT_1', 'PRODUCT_2') GROUP BY cust HAVING COUNT(DISTINCT prod) = 2 );
逻辑说明
- 子查询中,先筛选出产品为PRODUCT_1或PRODUCT_2的记录,按客户分组后,用
COUNT(DISTINCT prod) = 2确保该客户同时购买了两种产品。 - 外层查询用这些客户ID过滤原表,得到该客户的所有相关交易记录。
方法2:窗口函数统计产品种类数
通过窗口函数直接计算每个客户对应的不同产品数量,再筛选数量达标记录:
SELECT cust, prod FROM ( SELECT cust, prod, COUNT(DISTINCT prod) OVER (PARTITION BY cust) AS prod_count FROM your_table WHERE prod IN ('PRODUCT_1', 'PRODUCT_2') ) sub WHERE prod_count = 2;
逻辑说明
- 内层查询通过
PARTITION BY cust按客户分组,用窗口函数计算每个客户的不同产品数量。 - 外层筛选出产品数量等于2的记录,即为目标结果。
你原来的WHERE table.prod IN ('PRODUCT_1', 'PRODUCT_2')仅筛选了产品范围,未区分客户是否同时购买多种产品,所以会包含只买了其中一种产品的客户记录。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

