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

如何在单表中实现多行条件筛选?获取同时使用产品1和2的客户

如何在单表中筛选出同时使用产品1和2的客户

针对你给出的productdetails表数据,要找出同时使用产品1和产品2(即对应两个产品的is_use字段均为1)的客户,这里有几种实用的SQL实现方法:

方法一:GROUP BY + HAVING 分组筛选

这是最常用的方案之一,通过分组后统计符合条件的产品数量来判断:

SELECT customer
FROM productdetails
WHERE product IN (1, 2) AND is_use = 1
GROUP BY customer
HAVING COUNT(DISTINCT product) = 2;

逻辑说明:

  1. 先筛选出所有产品为1或2、且is_use为1的有效记录;
  2. 按customer分组,统计每个客户下符合条件的不同产品数量;
  3. 用HAVING子句过滤出恰好拥有2种产品的客户(也就是同时满足产品1和2都被使用)。

方法二:自连接查询

通过将表与自身连接,分别匹配两个产品的使用条件:

SELECT DISTINCT a.customer
FROM productdetails a
JOIN productdetails b ON a.customer = b.customer
WHERE a.product = 1 AND a.is_use = 1
  AND b.product = 2 AND b.is_use = 1;

逻辑说明:

  1. 把表拆分为两个逻辑表a和b,分别代表客户使用产品1和产品2的记录;
  2. 通过customer字段关联两个表,筛选出同时满足a表中产品1被使用、b表中产品2被使用的客户;
  3. 用DISTINCT避免重复结果(如果有多余记录的话)。

方法三:EXISTS 子查询

利用子查询验证客户是否同时满足两个产品的使用条件:

SELECT DISTINCT customer
FROM productdetails a
WHERE a.product = 1 AND a.is_use = 1
  AND EXISTS (
    SELECT 1
    FROM productdetails b
    WHERE b.customer = a.customer
      AND b.product = 2 AND b.is_use = 1
  );

逻辑说明:

  1. 先找出所有使用产品1的客户;
  2. 对每个客户,用EXISTS子查询检查该客户是否存在使用产品2的记录;
  3. 最终返回同时满足两个条件的客户列表。

验证结果

针对你提供的表数据,以上三种方法都会返回customer = 3,这是唯一同时使用产品1和2的客户。

内容的提问来源于stack exchange,提问作者Arunkumar Muthuvel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:44:25