我很难提出一个查询,该查询将找到同时购买了PROD1和PROD2的所有客户。
这是一个伪查询,看起来像我想要做的:(显然这是行不通的)
SELECT COUNT(DISTINCT userid) FROM TRANSACTIONS WHERE product_id = 'prod1' AND product_id = 'prod2'
因此,基本上,我正在尝试对transactions表中有product_id’ prod1‘和’ prod2‘事务的不同用户ID的数量进行计数。每个事务都存储在transactions表中的一行中。
transactions
prod1
prod2
我通过以下方式进行这种类型的查询:
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
GROUPBY
GROUP BY
SELECT userid FROM TRANSACTIONS WHERE product_id in ('prod1', 'prod2') GROUP BY userid HAVING COUNT(DISTINCT product_id) = 2
您应该尝试两个查询,使用来分析优化EXPLAIN,还应该运行一些测试并根据数据库中的数据量对结果进行计时。
EXPLAIN