sql - MySQL查询查找订购了两种特定产品的客户

标签 sql mysql

我在想出一个查询来查找同时购买了 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/

相关文章:

php - 使用 CodeIgniter 分组

mysql - MySqli select语句中的2代表什么?

android - select 中的 Ormlite 子查询

mysql - JOIN - 显示缺失的行但将它们附加到特定列

mysql - 提高连接性能

php - MySQL - 按类别随机获取记录并且每个类别都有限制

mysql - 使用带有附加条件的 EXISTS 获取最大行

php - 在 PDO 中使用 try 和 catch 的最佳方法是什么

sql - SQLite 自连接 ID 中的错误?

SQL 过程 : Removing duplicates, 重新分配外键引用