2014-11-08 66 views
-1

我需要帮助的是一个问题,我已经在这个任务上花了两天的时间(几乎)大脑。我对SQL还很陌生,我只是在挣扎。使用DISTINCT函数的SQL聚合函数问题

我不想要答案!我只是寻找帮助正确的方向。

这里有一个问题:

编写回答这个问题SELECT语句:哪些客户已经订购了多个产品?从客户表 的电子邮件地址不同的产品的数量从客户的订单

这是我到目前为止有::返回这些列

SELECT Customers.CustomerID, 
     Count(DISTINCT ProductID) AS ProductsCount 
FROM Customers 
     INNER JOIN Orders 
       ON Customers.CustomerID = Orders.CustomerID 
     JOIN Products 
     ON Products.ProductID = OrderItems.ProductID 
GROUP BY Customers.CustomerID, 
      Orders.CustomerID 

但我不断收到此错误:

Msg 4104, Level 16, State 1, Line 2 
    The multi-part identifier "OrderItems.ProductID" could not be bound. 

在这里玩的三张表的结构是。

Customer表具有Emailaddress和CustomerID列。 Orders表具有CustomerID和OrderID列。 Products表包含ProductID列。 OrderItems表具有OrderID,ProductID和Quantity列。

任何帮助将真的很有帮助!

谢谢!

+3

您没有加入'OrderItems'表。那是你有那个错误! – 2014-11-08 17:58:14

回答

0

这里找到答案小费,

  1. 发现其具有通过使用having clauseCount() aggregateGroup by orderIDOrderItems 表中有多个项目订单。

  2. 所以从第一步开始,您将获得每个订单中产品数量超过 的订单。接下来加入第一步结果 订单表来获得客户。

  3. 接下来加入与客户表的第二步结果,以获得单个 订单与计数,购买多个单一产品的 客户信息。

1

修复语法通过连接到的OrderItems表,以寻找一些不止一次的建议,你需要通过字段1,字段2等。具有计数(场)> 1.您使用组几乎在那里。

0

你就要成功了:-)

  • 你忘了加入的OrderItems。
  • 您不需要此查询中的表格产品(您不希望看到该表格中的任何内容;您从OrderItems中获得产品数量)。
  • 要按总量(按产品数量)限制,请使用HAVING。
  • 要按Orders.CustomerID进行分组是多余的,因为它等于Customers.CustomerID。