我在想出一个查询来查找同时购买了 PROD1 和 PROD2 的所有客户时遇到了问题。
这是一个看起来像我想做的伪查询:(显然这是行不通的)
SELECT COUNT(DISTINCT userid)
FROM TRANSACTIONS
WHERE product_id = 'prod1'
AND product_id = 'prod2'
所以基本上我正在尝试计算在 transactions
中有交易的不同用户 ID 的数量。 product_id ' prod1
的表' 和 ' prod2
'.每笔交易都存储在 transactions
中的一行中表。
最佳答案
我通过以下方式进行此类查询:
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';
GROUP BY
解决方案 shown by @najmeddine 也产生了你想要的答案,但它在 MySQL 上的表现不佳。 MySQL 很难优化 GROUP BY
查询。
您应该尝试这两个查询,使用 EXPLAIN
分析优化,并根据数据库中的数据量运行一些测试并计算结果时间。
关于sql - MySQL查询查找订购了两种特定产品的客户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1676863/