我正在尝试识别在单独订单中购买了所有 3 种特定产品的客户。每个客户应该至少购买过所有三种产品一次。 我的数据如下所示:
电子邮件 | 订单_id | 产品_id |
---|---|---|
电子邮件1 | 123456 | A |
电子邮件1 | 456789 | B |
电子邮件1 | 985432 | C |
电子邮件2 | 345533 | B |
电子邮件2 | 768843 | C |
电子邮件2 | 984452 | A |
电子邮件3 | 453645 | A |
电子邮件3 | 453645 | B |
电子邮件3 | 674452 | C |
我期待以下结果:
独特的电子邮件 |
---|
电子邮件1 |
电子邮件2 |
我正在使用下面的代码,但它没有给我正确的结果:
SELECT DISTINCT email as email
FROM table
WHERE product_id IN ('A', 'B', 'C')
GROUP BY email
HAVING COUNT(DISTINCT product_id) = 3
假设 MySQL 因为你首先标记了它
您缺少一个参数来确保它们来自不同的订单。
SELECT email
FROM orders
WHERE product_id IN ('A', 'B', 'C')
GROUP BY email
HAVING COUNT(DISTINCT product_id) = 3
AND COUNT(DISTINCT order_id) >= 3;
输出如您所料。
email
Email 1
Email 2
SQL小提琴:https://sqlfiddle.com/mysql/online-compiler?id=55ba49bd-9853-4854-bfb0-8eda0908bb6a