ホームページ > データベース > mysql チュートリアル > MySQL で GROUP BY 句にない列の選択が許可されるのはなぜですか?

MySQL で GROUP BY 句にない列の選択が許可されるのはなぜですか?

Susan Sarandon
リリース: 2024-12-23 08:40:17
オリジナル
376 人が閲覧しました

Why Does MySQL Allow Selecting Columns Not in the GROUP BY Clause?

GROUP BY 句に含まれていないカラムの選択: MySQL のあいまいな動作

MySQL では、集計関数または GROUP BY に含まれていないカラムを選択することができます。この句は、他の SQL データベースから来たプログラマーにとって混乱を招く可能性があります。この動作は、選択されたすべての列がグループ化の一部であるか、集計関数に表示される必要がある ANSI SQL 標準から逸脱しています。

曖昧なクエリと任意の値の選択

MySQL がそのようなクエリに遭遇すると、各グループのカラムから任意の値 (通常は最初の値または最初の値) を黙って返します。グループの最後の行。この動作により、特にグループ化されていない列の値が各グループ内で一貫していない場合、あいまいな結果が生じる可能性があります。

クエリの例

次の MySQL クエリを考えてみましょう。 :

SELECT
     AVG(table_name.col1),
     AVG(table_name.col2),
     AVG(table_name.col3),
     table_name.personID,
     table_name.col4
FROM table_name
GROUP BY table_name.personID;
ログイン後にコピー

このクエリでは、col4 は GROUP BY 句または集計関数の一部ではありません。 MySQL は各グループのcol4 の値を任意に選択します。これは、グループ内の異なる行のcol4の値が異なる場合に問題となる可能性があります。

関数の依存関係と決定的な結果

MySQL では、グループ化されていない列が機能的に選択されている場合にそれらを選択できます。 GROUP BY 句の列に依存します。これは、グループ化列の各値に対して、グループ化されていない列に取り得る値は 1 つだけであることを意味します。このような場合、クエリは決定的な結果を返します。

ただし、あいまいなクエリでの MySQL の動作は将来のバージョンで変更される可能性があることに注意することが重要です。したがって、グループ化されていない列が GROUP BY 句または集計関数に明示的に含まれていない限り、SELECT 句では使用しないことをお勧めします。

"ONLY_FULL_GROUP_BY" SQL モード

MySQL 5.7 では、「ONLY_FULL_GROUP_BY」SQL モードが導入されました。 GROUP BY クエリの ANSI SQL 標準。このモードが有効な場合、集計関数を使用せずにグループ化されていない列を選択すると、エラーが発生します。

以上がMySQL で GROUP BY 句にない列の選択が許可されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート