私のクエリ:
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.12で動作しています
したがって、成功へのステップ:
Sudo vim /etc/mysql/conf.d/mysql.cnf
ファイルの一番下までスクロールコピーして貼り付け
[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
ファイルの最後まで
Sudo service mysql restart
はMySQLを再起動します。できた!
これは私のために働いた:
mysql -u root -p
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
最初のステップでSudoが必要になる場合があります。
Sudo mysql -u root -p
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未満であるため、エラーが発生しています
無効にすることができます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';
私はこれを試し、私のために働きました。ありがとう:)
解決策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.
NOT IN
をgroup by
句で集約する必要があります。
したがって、2つのオプションがあります...Add Credit_Initialおよび Disponible_vにgroup by
OR
値がとにかく一定であり、他に影響がないことがわかっている場合は、それらをMAX( Credit_Initial ) as Credit_Initial, MAX( Disponible_v ) as Disponible_v
に変更します。
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