MySQL - 为什么近2个相同的查询导致2个不同的结果?通过...分组

时间:2013-10-01 21:11:58

标签: mysql sql group-by

我有两个几乎相同的查询,一个有GROUP BY,一个没有。结果非常不同。 GROUP BY查询导致非GROUP BY查询结果的两倍多。

查询1:

SELECT table2.name, COUNT(DISTINCT(op.id))
FROM op INNER JOIN table1 ON table1.EID = op.ID
    INNER JOIN table3 ON table3.id = table1.jobid
    INNER JOIN table2 ON table2.id = table3.CatID
WHERE op.BID = 1
    AND op.ActiveStartDate <= NOW()
    AND op.ActiveEndDate >= NOW()
GROUP BY table2.name
ORDER BY COUNT(*) DESC;

查询2:

SELECT op.Type, COUNT(DISTINCT op.id)
FROM op
WHERE op.BID = 1
AND op.ActiveStartDate <= NOW()
    AND op.ActiveEndDate >= NOW()
ORDER BY op.Type ASC;

这些应该会产生相同的结果。在玩它们时,一旦我从查询1中删除“GROUP BY”,结果就是一样的。如果我将“GROUP BY”放回到查询1中,结果将增加一倍以上。

编辑:似乎额外的INNER JOINS不影响结果,而是影响查询1中的GROUP BY。如果我在查询1中删除GROUP BY,则2个查询之间的结果是相同的。如果我将GROUP BY添加回查询1,结果会有很大不同。

2 个答案:

答案 0 :(得分:0)

我不知道您认为那些几乎相同的查询;他们是非常不同的。无论如何,您不应该从第一个GROUP BY中移除GROUP BY,而是在第二个查询中添加SELECT op.Type, COUNT(DISTINCT op.id) FROM op WHERE op.BID = 1 AND op.ActiveStartDate <= NOW() AND op.ActiveEndDate >= NOW() GROUP BY op.Type ORDER BY op.Type ASC;

{{1}}

当然,这并不意味着你会得到相同的结果,因为第一个查询有3个额外的连接。

答案 1 :(得分:0)

在我看来,查询根本不是“几乎相同......”。 你有INNER JOIN和其他可以有重复的tabl,因此INNER JOIN将增加该数字的行数。 你可以在这里查看解释

INNER JOIN and GROUP BY