我正在学习 SQL 课程,完全被这个问题难住了。
使用子查询有一个查询返回:CustomerID、EmailAddress、FirstName、LastName、'#3:订购超过 1 件产品的客户'作为 queryInfo 此查询的子查询将是:订购超过 1 件产品的所有客户
注意:不止一个产品,而不是数量 > 1 所以订购 10 个相同产品的客户不是我要找的。
这是我使用的完整查询:
SELECT c.CustomerID
, c.EmailAddress
, c.FirstName
, c.LastName
, '#3: Customers who have ordered more than 1 product' AS queryInfo
FROM Customers c
WHERE c.CustomerID IN (
SELECT p.ProductID
FROM Customers c
JOIN Orders o
ON c.CustomerID = o.CustomerID
JOIN OrderItems oi
ON o.OrderID = oi.OrderID
JOIN Products p
ON oi.ProductID = p.ProductID
GROUP BY p.ProductID
HAVING COUNT(*) > 1
)
;
不知道我做错了什么,但非常感谢任何输入。谢谢!
您的代码有许多问题:
COUNT(DISTINCT
您可以根据需要在此处简化为 不同产品的数量ProductID
您需要的CustomerID
。由于您需要分组计数,因此最好使用EXISTS
查询Customer
不必要地再次查询。Products
也不需要,因为你可以ProductID
从OrderItems
您还可以从外部的子查询中删除
HAVING
并检查:COUNT(DISTINCT
怎么了?从你的角度?但:
子选择返回 productid 而不是 customerid,这意味着返回的数据是错误的
subselect 中的客户表和产品表是机器人需要的。您可以在 orderitems 表中按 productid 分组,并从 orderheader 返回 customerid