奇怪的MySQL连接查询结果与聚合函数

时间:2014-09-21 07:12:39

标签: mysql database join indexing aggregate-functions

我编写了以下加入查询,以使用汇总函数获取报告

SELECT users.id, SUM(orders.totalCost) AS bought, COUNT(comment.id) AS commentsCount, COUNT(topics.id) AS topicsCount, COUNT(users_login.id) AS loginCount, COUNT(users_download.id) AS downloadsCount 
FROM users 
LEFT JOIN orders ON users.id=orders.userID AND orders.payStatus=1 
LEFT JOIN comment ON users.id=comment.userID 
LEFT JOIN topics ON users.id=topics.userID 
LEFT JOIN users_login ON users.id=users_login.userID 
LEFT JOIN users_download ON users.id=users_download.userID 
GROUP BY users.id
ORDER BY bought DESC

但我不知道为什么我得到以下输出?

聚合函数的结果相互成倍!!!

我不知道为什么?

例如,对于最后一行我期望得到以下结果

821    |    48000    |    63    |    0    |    10    |    10

enter image description here

执行EXPLAIN查询的结果如下所示

enter image description here

1 个答案:

答案 0 :(得分:2)

这种类型的结果的一个原因是你正在使用与用户表的左连接,结果集可能包含每个用户的重复行,所以你得到的数量超过预期的数量,你可以使用{ {1}}在count中只计算每个用户的唯一关联,并且对于DISTINCT的总和,您可以使用子选择为每个用户提供一个总和,而不必为用户的订单重复值

totalCost