2014-11-08 131 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。