我有两个几乎相同的查询,一个有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,结果会有很大不同。
答案 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将增加该数字的行数。 你可以在这里查看解释