1

GROUP BYちょっと脇に置いておきましょう。通常のクエリ(なしGROUP BY)では、セマンティックの違いは何ですか?なぜこの答えが機能するのですか?HAVING(代わりに句にエイリアスを入れてくださいWHERE

4

3 に答える 3

3

HAVING要約された行で動作します-が適用されるWHERE前にテーブル全体で動作します。(脇にGROUP BY置くことはできません。これは、で使用するために予約されている句です。を省略しても、舞台裏で発生している暗黙のアクションは変更されません)。GROUP BYHAVINGGROUP BYGROUP BY

WHEREこのため、インデックスを使用できるのに使用できないことに注意することも重要HAVINGです。(非常に些細なグループ化されていない結果セットでは、理論的にはのインデックスを使用できますがHAVING、クエリオプティマイザーが実際にこのように実装されているのを見たことがありません)。

于 2010-11-27T09:58:17.237 に答える
2

MySQLは、句までのクエリを評価し、WHERE句でフィルタリングしHAVINGます。そのためHAVING、列のエイリアスを認識できますが、認識WHEREできません。

句を省略するGROUP BYことで、結果をグループ化しないようにクエリに指示するだけだと思います。

于 2010-11-27T09:59:07.357 に答える
1

非常に大まかに言えば、WHEREクエリ (DB テーブル) に入るデータをフィルター処理し、クエリHAVINGの出力をフィルター処理します。

句内のステートメントWHEREはテーブル (およびその他の外部データ ソース)HAVINGのみを参照できますが、句内のステートメントはクエリによって生成されたデータのみを参照できます。

于 2010-11-27T10:20:53.220 に答える