我无法提出查询,找到所有购买了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表中的一行中.
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)
我通过以下方式执行此类查询:
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,并运行一些测试并根据数据库中的数据量计算结果.
| 归档时间: |
|
| 查看次数: |
12461 次 |
| 最近记录: |