web-dev-qa-db-ja.com

#1055-SELECTリストの式がGROUP BY句になく、sql_mode = only_full_group_byと互換性のない非集計列が含まれています

私のクエリ:

select libelle,credit_initial,disponible_v,sum(montant) as montant 
FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee 
and annee = year(current_timestamp) GROUP BY libelle order by libelle asc
  • Mysql 5.7.9は問題なくクエリを実行しますが、mysql 5.7.12は上記のエラーを表示します
43
Miloud BAKTETE

私はこれを動作させるのに苦労しましたが、私はそれをテストし、ランプサーバーmysqlバージョン5.12で動作しています

したがって、成功へのステップ:

  1. Sudo vim /etc/mysql/conf.d/mysql.cnf
  2. ファイルの一番下までスクロールコピーして貼り付け

    [mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

ファイルの最後まで

  1. 入力モードを保存して終了する
  2. Sudo service mysql restartはMySQLを再起動します。

できた!

82
Miloud BAKTETE

これは私のために働いた:

mysql -u root -p
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

最初のステップでSudoが必要になる場合があります。

Sudo mysql -u root -p
34
Henry

GROUP BY句で、集計関数に使用していないすべての列を次のように指定する必要があります。

select libelle,credit_initial,disponible_v,sum(montant) as montant 
FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee 
and annee = year(current_timestamp) GROUP BY libelle,credit_initial,disponible_v order by libelle asc

full_group_byモードを使用すると、基本的に、より慣用的なSQLを作成できます。必要に応じて、この設定をオフにすることができます。 MySQL Documentation に概説されているこれを行うためのさまざまな方法があります。上で言ったことのMySQLの定義は次のとおりです。

MySQL 5.7.5以降では、機能依存の検出が実装されています。 ONLY_FULL_GROUP_BY SQLモードが有効になっている場合(デフォルト)、MySQLは、選択リスト、HAVING条件、またはORDER BYリストが、GROUP BY句で名前が指定されておらず、機能的に依存していない非集計列を参照するクエリを拒否します。 (5.7.5より前では、MySQLは機能依存を検出せず、ONLY_FULL_GROUP_BYはデフォルトで有効になっていません。5.7.5より前の動作の説明については、MySQL 5.6リファレンスマニュアルを参照してください。)

バージョンが5.7.5未満であるため、エラーが発生しています

18
gr1zzly be4r

無効にすることができますsql_mode = only_full_group_byターミナルまたはMySql IDEでこれを試すことができるコマンドによって

mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

私はこれを試し、私のために働きました。ありがとう:)

13
Anil Gupta

解決策1:mysqlコンソールからONLY_FULL_GROUP_BYを削除する

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

あなたはここでもっと読むことができます

解決策2:phpmyadminからONLY_FULL_GROUP_BYを削除する

Open phpmyadmin & select localhost
Click on menu Variables & scroll down for sql mode
Click on edit button to change the values & remove ONLY_FULL_GROUP_BY & click on save. 

click here to see image

9
Tauqueer Hassan

NOT INgroup by句で集約する必要があります。

したがって、2つのオプションがあります...Add Credit_Initialおよび Disponible_vgroup by

OR

値がとにかく一定であり、他に影響がないことがわかっている場合は、それらをMAX( Credit_Initial ) as Credit_Initial, MAX( Disponible_v ) as Disponible_vに変更します。

6
DRapp

5.7.5 ONLY_FULL_GROUP_BYの基本構成およびデフォルト構成

select libelle,credit_initial,disponible_v,sum(montant) as montant 
FROM fiche,annee,type 
where type.id_type=annee.id_type 
and annee.id_annee=fiche.id_annee 
and annee = year(current_timestamp) 
GROUP BY libelle,credit_initial,disponible_v order by libelle asc
4
scaisEdge