エラー1055 BY GROUPのMySQLの使用

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/weixin_45505313/article/details/102729617

1.問題の原因

MySQLの8.0.17バージョンで次のSQL文を実行し、エラーを報告 Error 1055

select Host,Select_priv,user,COUNT(*)
FROM user
GROUP BY Select_priv,Host;

エラーメッセージ:

Error 1055 - Expression #1 of SELECT list is not in GROUP BY clause 
and contains nonaggregated column 'mysql.user.Host' which
is not functionally dependent on columns in GROUP BY
clause; this is incompatible with sql_mode=only_full_group_by

間違った視点からの情報は、主にsql_mode = only_full_group_by関連します。モードONLY_FULL_GROUP_BY 5.7バージョンがデフォルトで有効にされた後にこれは、バージョン5.7以上のMySQLの新機能によって、グループで

ONLY_FUll_GROUP_BY 模式

  • 重合のためのGROUP BY操作、フィールドがGROUP BYステートメントではないため、フィールドには、これは正当ではないGROUP BY、SQLのSELECTに表示されていない場合実際には、そのチェックアウトフィールドがフィールドに表示されGROUP BYの後のフィールド、または集約関数のセットに含まれている必要があります

2.ソリューション

  1. 第1の接続端子がグローバルsql_modeのを表示するには、次のコマンドを使用して、MySQLを入力するには、次のテーマを参照してください

    SELECT @@GLOBAL.sql_mode;
    

    ここに画像を挿入説明

  2. 主がここでコマンドによって修飾SQL_MODE、ONLY_FUll_GROUP_BY除去および再配置されています

     set @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
    
  3. sql_modeの設定を見直し、成功した変更を確認

    SELECT @@GLOBAL.sql_mode;
    

    ここに画像を挿入説明

  4. マックの下でMySQLサービスを再起動し

    mysql.server restart
    

3.まとめ

デフォルトのオープン、なぜ実際には、厳密に言えば、MySQLの理由ONLY_FUll_GROUP_BYモードがエラーを低減することもあります。探しているときではないので、フィールドを選択GROUP BY重合フィールド、屈折率変化やオプティマイザが異なる結果を返すことが異なる最適化戦略を選択する際に、決定されていないデータのフィールドをチェックしてくださいこの例の後、sql_modeのは、データベースを変更、クエリステートメントが正常に実行結果は以下の通りであるされています。全体のテーマデータ表から分かるように、フィールド条件の変更が4つの異なる値があるが、最初の2つの問合せの結果、GROUP BYを使用し、実際にユーザフィールドは、また、障害の原因となる、平均後の他の値に見出すことができます

select Host,Select_priv,user,COUNT(*)
FROM user
GROUP BY Select_priv,Host;

ここに画像を挿入説明
ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/weixin_45505313/article/details/102729617