0

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

查询一:

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,结果将大不相同。

4

2 回答 2

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;

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

于 2013-10-01T21:15:02.767 回答
0

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

INNER JOIN 和 GROUP BY

于 2013-10-01T21:20:25.407 回答