2012-02-08 53 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