小编典典

MySQL查询以查找已订购两种特定产品的客户

sql

我很难提出一个查询,该查询将找到同时购买了PROD1和PROD2的所有客户。

这是一个伪查询,看起来像我想要做的:(显然这是行不通的)

SELECT COUNT(DISTINCT userid) 
  FROM TRANSACTIONS 
 WHERE product_id = 'prod1' 
   AND product_id = 'prod2'

因此,基本上,我正在尝试对transactions表中有product_id’ prod1‘和’
prod2‘事务的不同用户ID的数量进行计数。每个事务都存储在transactions表中的一行中。


阅读 237

收藏
2021-04-07

共1个答案

小编典典

我通过以下方式进行这种类型的查询:

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';

@najmeddine显示的GROUPBY解决方案还会产生您想要的答案,但在MySQL上的效果不佳。MySQL很难优化查询。GROUP BY

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

您应该尝试两个查询,使用来分析优化EXPLAIN,还应该运行一些测试并根据数据库中的数据量对结果进行计时。

2021-04-07