0

我对 SQL Server 示例数据库有疑问Northwind,但不知道如何解决

显示CustomerID给所有订单中至少有三种不同产品但从未从同一类别订购过 2 种产品的所有客户。

我不知道如何检查“但从未订购过同一类别的 2 件产品”

请帮助我:) 我为这个问题尝试的代码:

SELECT
    c.CustomerID,COUNT(DISTINCT p.ProductID)
FROM 
    Customers c
JOIN 
    Orders o ON o.CustomerID = c.CustomerID
JOIN 
   [Order Details] od ON od.OrderID = o.OrderID
JOIN 
   Products p ON p.ProductID = od.ProductID
GROUP BY
   c.CustomerID
HAVING
   COUNT(DISTINCT p.ProductID) >= 3 

我一直在这些查询上停留了几个小时,请帮助大家!

这是Northwind示例数据库的链接:https ://northwinddatabase.codeplex.com/

4

2 回答 2

0

如果每个订单必须来自不同的类别,那么 COUNT(product) 应该与 COUNT(category) 相同。这是逻辑上接近它的一种方法,但毫无疑问还有其他解决方案。

于 2015-12-25T15:51:43.700 回答
0

再添加一个条件来检查不同产品的数量是否等于不同类别的数量。这样可以确保每个类别中始终只有一种产品。

SELECT 
c.CustomerID,COUNT(DISTINCT p.ProductID), count(distinct c.categoryid)
FROM Customers c
JOIN Orders o ON o.CustomerID = c.CustomerID
JOIN [Order Details] od ON od.OrderID = o.OrderID
JOIN Products p ON p.ProductID = od.ProductID
GROUP BY c.CustomerID
HAVING COUNT(DISTINCT p.ProductID) >= 3 
and count(distinct c.categoryid) = COUNT(DISTINCT p.ProductID)
于 2015-12-25T15:53:20.743 回答