ホームページ > データベース > mysql チュートリアル > MySQL が「GROUP BY にありません」エラーをスローするのはなぜですか?

MySQL が「GROUP BY にありません」エラーをスローするのはなぜですか?

Susan Sarandon
リリース: 2024-12-05 12:15:13
オリジナル
327 人が閲覧しました

Why Does MySQL Throw an

MySQL の「isn't in GROUP BY」エラー: 包括的な説明

SELECT COUNT と SELECT を GROUP BY と組み合わせる MySQL クエリを実行すると、結果の数に不一致が発生する可能性があります。この背後にある理由は、多くの場合、「'field_name' は GROUP BY にありません」という悪名高いエラー メッセージです。

エラーを理解するために、問題を分析してみましょう:

MySQL と GROUP BY

GROUP BY は、指定された 1 つ以上の列の値に基づいて行をグループ化します。この例では、GROUP BY を使用したクエリに GROUP BY name などの句が含まれています。これは、一意の名前値を持つ行のみがグループ化されることを意味します。

SQL92 対 SQL99 対 MySQL

SQL92 では、当初、SELECT 句内のすべての列が GROUP BY 句にも含まれる必要がありました。ただし、SQL99 ではこの制限が緩和され、機能的に GROUP BY カラムに依存するカラムを SELECT 句に含めることが可能になりました。

MySQL では、デフォルトで「部分グループ化」が許可されます。つまり、 GROUP BY 句に明示的に含まれていない SELECT 句。ただし、これにより非決定的な結果が生じる可能性があります。

解決策

この問題を解決するには、SELECT 句内のすべての列が GROUP BY 句の一部であるか、GROUP BY 句に機能的に依存していることを確認します。それ。この例では、タイプ、言語、コードを GROUP BY 句に追加する必要があります。

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name`, `type`, `language`, `code` 
ORDER BY `count` DESC LIMIT 0, 25
ログイン後にコピー

完全な Group By と部分的な Group By の比較

MySQL には @ という設定も用意されています。 @sql_mode、次のようにして完全なグループを適用するように設定できます。

set @@sql_mode='ONLY_FULL_GROUP_BY';
ログイン後にコピー

この設定では、完全なグループ化はエラーになります。

以上がMySQL が「GROUP BY にありません」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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