2012-02-08 83 views
2

我已經撰寫了以下查詢以獲取客戶電子郵件地址,ordercount(客戶已下達多少訂單),訂單的總價格。但我得到重複的結果。在sql中獲得不同的記錄

我想有不同的記錄,如:

 
Customer A, 5 orders, $125 total 
Customer B, 2 orders, $150 total 

,但我得到的結果類似:

 
Customer A, 4 orders, $100 total 
Customer A, 1 order, $25 total 
Customer B, 1 order, $100 total 
Customer B, 1 order, $50 total 

能否請你幫我,我怎麼能知道檢查結果,因爲我想要的。我寫了下面的查詢:

Select 
    customers.CustomerID, 
    customers.EmailAddress, 
    COUNT(Orders.OrderID) AS Ordercount, 
    Sum(OrderDetails.TotalPrice * OrderDetails.Quantity) AS TotalPrice 
from 
    customers 
    INNER JOIN Orders ON customers.CustomerID = Orders.CustomerID 
    INNER JOIN OrderDetails ON OrderDetails.OrderID = Orders.OrderID 
GROUP BY 
    customers.CustomerID, 
    customers.EmailAddress, 
    Orders.OrderID, 
    OrderDetails.TotalPrice, 
    OrderDetails.Quantity 
ORDER BY customers.CustomerID, orders.OrderID desc 
+0

爲什麼你的團隊中有customerID,但不要選擇它? – 2012-02-08 10:45:36

+0

對不起,我發佈錯誤的查詢我的查詢ia,如下所示:選擇customers.CustomerID,customers.EmailAddress,COUNT(Orders.OrderID)AS Ordercount,Sum(OrderDetails.TotalPrice * OrderDetails.Quantity)AS TotalPrice from customers INNER JOIN Orders ON customers .CustomerID = Orders.CustomerID INNER JOIN OrderDetails ON OrderDetails.OrderID = Orders.OrderID GROUP BY customers.CustomerID,customers.EmailAddress,Orders.OrderID,OrderDetails.TotalPrice,OrderDetails.Quantity ORDER BY customers.CustomerID,orders.OrderID desc – user818671 2012-02-08 10:50:20

回答

1

你只需要group by這是在選擇,而不是部分領域一個COUNTSUM

Select 
    customers.CustomerID, 
    customers.EmailAddress, 
    COUNT(Orders.OrderID) AS Ordercount, 
    Sum(OrderDetails.TotalPrice * OrderDetails.Quantity) AS TotalPrice 
from 
    customers 
    INNER JOIN 
    Orders ON customers.CustomerID = Orders.CustomerID 
    INNER JOIN 
    OrderDetails ON OrderDetails.OrderID = Orders.OrderID 
GROUP BY 
    customers.CustomerID, 
    customers.EmailAddress 
ORDER BY 
    customers.CustomerID desc 
+0

但我得到以下錯誤:ORDER BY子句中的「Orders.OrderID」列無效,因爲它不包含在聚合函數或GROUP BY子句中。如果我不包括它。 – user818671 2012-02-08 10:59:00

+0

確定只是由客戶ID命令。或者按COUNT(Orders.OrderID)排序,如果您想要頂部 – 2012-02-08 11:01:05

+0

的大部分訂單,那麼它正在工作。謝謝 – user818671 2012-02-08 11:23:36

1

的問題仍然在GROUP BY部分,嘗試這樣的:

Select customers.CustomerID, 
     customers.EmailAddress, 
     COUNT(Orders.OrderID) AS Ordercount, 
     Sum(OrderDetails.TotalPrice * OrderDetails.Quantity) AS TotalPrice 
from customers 
INNER JOIN Orders ON customers.CustomerID = Orders.CustomerID 
INNER JOIN OrderDetails ON OrderDetails.OrderID = Orders.OrderID 
GROUP BY customers.CustomerID, 
     customers.EmailAddress 
ORDER BY customers.CustomerID, COUNT(Orders.OrderID) desc 
+0

我發佈了錯誤的查詢,你可以檢查評論中正確的查詢上面。 – user818671 2012-02-08 10:53:11

+0

@ user818671立即嘗試:) – 2012-02-08 10:57:14

+0

我收到以下錯誤:ORDER BY子句中的「Orders.OrderID」列無效,因爲它不包含在聚合函數或GROUP BY子句中。 – user818671 2012-02-08 11:00:51

1

分組和排序方式,如訂單ID列的問題 - 嘗試:

Select customers.CustomerID, 
     max(customers.EmailAddress) AS EmailAddress, 
     COUNT(Orders.OrderID) AS Ordercount, 
     Sum(OrderDetails.TotalPrice * OrderDetails.Quantity) AS TotalPrice 
from customers 
INNER JOIN Orders ON customers.CustomerID = Orders.CustomerID 
INNER JOIN OrderDetails ON OrderDetails.OrderID = Orders.OrderID 
GROUP BY customers.CustomerID 
ORDER BY customers.CustomerID 
+0

上面的查詢也起作用。謝謝 – user818671 2012-02-08 11:24:53