You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取购买多种产品的客户?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:25:35