![](/img/trans.png)
[英]Using SQL query to find details of customers who ordered > x types of products
[英]MySQL Query to find customers who have ordered two specific products
我无法提出查询,找到所有购买了PROD1和PROD2的客户。
这是一个伪查询,看起来像我想做的事情:(显然这不起作用)
SELECT COUNT(DISTINCT userid)
FROM TRANSACTIONS
WHERE product_id = 'prod1'
AND product_id = 'prod2'
所以基本上,我试图让有在交易不同的用户ID的数量的计数transactions
表都PRODUCT_ID“ prod1
”和“ prod2
”。 每个事务都存储在transactions
表中的一行中。
SELECT userid
FROM TRANSACTIONS
WHERE product_id in ('prod1', 'prod2')
GROUP BY userid
HAVING COUNT(DISTINCT product_id) = 2
(使用用户提供的附加信息在下面添加了新选项)
尝试
SELECT * FROM Customers WHERE
EXISTS (SELECT * FROM Purchases WHERE ProductID = 'PROD1' AND CustID = Customers.CustID)
AND
EXISTS (SELECT * FROM Purchases WHERE ProductID = 'PROD2' AND CustID = Customers.CustID)
要么
SELECT * FROM Customers WHERE
CustID IN (SELECT CustID FROM Purchases WHERE ProductID = 'PROD1')
AND
CustID IN (SELECT CustID FROM Purchases WHERE ProductID = 'PROD2')
要么
SELECT UserID FROM Transactions WHERE ProductID = 'PROD1'
AND EXISTS (SELECT * FROM Transactions WHERE UserID = T1.UserID
AND ProductID = 'PROD2')
要么
SELECT UserID FROM Transactions WHERE ProductID = 'PROD1'
AND UserID IN (SELECT UserID FROM Transactions WHERE ProductID = 'PROD2')
这是一个基于臭名昭着的Northwind示例数据库的Access答案。 你应该很容易在mySql中翻译它。
SELECT o.CustomerID, Sum([ProductID]='Prod1') AS Expr1, Sum([productid]='Prod1') AS Expr2
FROM Orders AS o INNER JOIN [Order Details] AS d ON o.OrderID = d.OrderID
GROUP BY o.CustomerID
HAVING (((Sum([ProductID]='Prod1'))<>0) AND ((Sum([productid]='Prod1'))<>0));
SELECT COUNT(DISTINCT userId)
FROM(
SELECT userId
FROM transactions
WHERE product = 'PROD1'
INTERSECT
SELECT userId
FROM transactions
WHERE product = 'PROD2');
该查询创建了两个中间表,一个包含购买PROD1的客户的userId和另一个购买PROD2的相同表。 交集运算符返回一个表,该表仅包含在前两个表中找到的行,即那些购买两个产品的表。
sakila db的示例:
SELECT R.customer_id, GROUP_CONCAT(I.film_id)
FROM sakila.rental R
RIGHT OUTER JOIN sakila.inventory I ON R.inventory_id = I.inventory_id
WHERE I.film_id IN (22,44) GROUP BY R.customer_id HAVING COUNT(*) = 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.