2014-09-04 66 views
0

我需要知道是否有更好的方法来运行以下查询。它正在返回错误的COUNT号码,因为要获取客户的地址,我必须加入customers_addresses表,并且某些客户拥有多个地址。因此,COUNT正乘以用户拥有的地址数量。我不希望它这样做,但我仍然想获取地址信息。有谁知道我该怎么做?SQL COUNT乘以连接表中的条目

SELECT 
    Customers.UserID, 
    Customers.FirstName, 
    Customers.LastName, 
    Customers_Addresses.Address1, 
    Customers_Addresses.City, 
    Customers_Addresses.Region, 
    TotalOrders 
FROM 
    (SELECT 
     Customers.UserID, 
     Customers.FirstName, 
     Customers.LastName, 
     Customers_Addresses.Address1, 
     Customers_Addresses.City, 
     Customers_Addresses.Region, 
     Customers.GroupID, 
     COUNT(Orders.OrderID) AS TotalOrders, 
     SUM(Orders.TotalCost) AS TotalSalesOfAllTime 
    FROM 
     Orders 
     INNER JOIN Customers ON Customers.UserID = Orders.UserID 
     INNER JOIN Groups ON Customers.GroupID = Groups.GroupID 
     INNER JOIN Customers_Addresses ON Customers.UserID = Customers_Addresses.UserID 
    GROUP BY Orders.UserID 
) Customers 
INNER JOIN Customers_Addresses ON Customers.UserID = Customers_Addresses.UserID 
WHERE 
    1 = 1 
     AND Customers.UserID BETWEEN 2570 AND 2570 
+0

通过格式化您的问题中的查询开始。 – 2014-09-04 14:10:50

+0

您是否考虑过MySQL的[GROUP_CONCAT](http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat)函数? – 2014-09-04 14:44:41

回答

0

您可以从内部查询删除Customers_Addressses表,因为你可以在你的主查询外JOIN它,你在做什么,反正所以有它的子查询superflous。

SELECT 
Customers.UserID, 
Customers.FirstName, 
Customers.LastName, 
Customers_Addresses.Address1, 
Customers_Addresses.City, 
Customers_Addresses.Region, 
TotalOrders 
FROM 
(SELECT 
    Customers.UserID, 
    Customers.FirstName, 
    Customers.LastName, 
    Customers.GroupID, 
    COUNT(Orders.OrderID) AS TotalOrders, 
    SUM(Orders.TotalCost) AS TotalSalesOfAllTime 
FROM 
    Orders 
    INNER JOIN Customers ON Customers.UserID = Orders.UserID 
    INNER JOIN Groups ON Customers.GroupID = Groups.GroupID 
GROUP BY Orders.UserID 
) Customers 
INNER JOIN Customers_Addresses ON Customers.UserID = Customers_Addresses.UserID 
WHERE Customers.UserID BETWEEN 2570 AND 2570 
+0

完美!这解决了COUNT问题,但由于外部查询中的customer_addresses的内部连接,我仍然有客户重复两次。有没有办法来汇总数据? – CaitlinHavener 2014-09-04 14:29:01