0

ほぼ同一の 2 つのクエリがあります。1 つは GROUP BY を使用し、もう 1 つは使用しません。結果は大きく異なります。GROUP BY クエリの結果は、非 GROUP BY クエリの結果の 2 倍以上になります。

クエリ 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 に戻すと、結果は 2 倍以上になります。

編集: 追加の INNER JOINS は結果に影響を与えていないようですが、クエリ 1 の GROUP BY に影響を与えているようです。クエリ 1 で GROUP BY を削除すると、2 つのクエリ間の結果は同じになります。GROUP BY をクエリ 1 に戻すと、結果は大きく異なります。

4

2 に答える 2

0

それらがほとんど同じクエリであるとあなたがどのように考えているのかわかりません。それらは非常に異なります。とにかく、最初のクエリからを削除するのではなく、2 番目のクエリGROUP BYに a を追加する必要があります。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 に答える