MySQL Query查找订购了两种特定产品的客户

Ian*_*Ian 3 mysql sql

我无法提出查询,找到所有购买了PROD1和PROD2的客户.

这是一个伪查询,看起来像我想做的事情:(显然这不起作用)

SELECT COUNT(DISTINCT userid) 
  FROM TRANSACTIONS 
 WHERE product_id = 'prod1' 
   AND product_id = 'prod2'
Run Code Online (Sandbox Code Playgroud)

因此,基本上我正在尝试计算transactions表中包含product_id' prod1'和' prod2' 的事务的不同用户ID的数量.每个事务都存储在transactions表中的一行中.

man*_*nji 5

SELECT userid
  FROM TRANSACTIONS
 WHERE product_id in ('prod1', 'prod2')
GROUP BY userid
HAVING COUNT(DISTINCT product_id) = 2
Run Code Online (Sandbox Code Playgroud)


Bil*_*win 5

我通过以下方式执行此类查询:

SELECT COUNT(DISTINCT t1.userid) AS user_count
  FROM TRANSACTIONS t1
  JOIN TRANSACTIONS t2 USING (userid)
 WHERE t1.product_id = 'prod1' 
   AND t2.product_id = 'prod2';
Run Code Online (Sandbox Code Playgroud)

@najmeddine 显示GROUP BY解决方案也会产生你想要的答案,但它在MySQL上表现不佳.MySQL很难优化查询.GROUP BY

您应该尝试两个查询,分析优化EXPLAIN,并运行一些测试并根据数据库中的数据量计算结果.