更多帮助罗斯文SQL实例

问题描述 投票:0回答:2

我对Northwind的SQL Server示例数据库的问题,我不知道如何解决它

展会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/

sql sql-server group-by having northwind
2个回答
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)

0
投票

如果每个顺序必须从一个不同的类别,然后COUNT(产品)应该是相同COUNT(类别)。这是一个在逻辑上将接近它,但毫无疑问,也有其他的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.