MySQL解決ONLY_FULL_GROUP_BYエラーのいくつかの方法


原文リンク:のブログ
MySQL 5.7以降でいくつかORDER BYまたはGROUP BYの場合、次のようなエラーが発生します[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by、MySQLの制約は、あなたが行ったGROUP BYおよびORDER BY、あなたを保証する必要があるSELECTの列はすべてGROUP BYおよびORDER BYの中にありますが、実際のニーズはそう簡単ではありません.
仮修正ONLY_FULL_GROUP_BYモード
既存のパターンを検索

select @@global.sql_mode;

奥のONLY_FULL_GROUP_BYパターンを外してセットして帰ります

set @@global.sql_mode = "     ,   ONLY_FULL_GROUP_BY"

プロファイルのONLY_の変更FULL_GROUP_BYモード
見つけたmy.iniファイル、そのうちのsql_mode値を修正

sql_mode="     ,   ONLY_FULL_GROUP_BY"

and_を借りてvalue()関数は、グループに参加していないカラムを無視します. ANY_VALUE()未集約の列を参照し、無効にすることなく ONLY_FULL_GROUP_BY同じ効果を得ることができます.
例:

mysql> SELECT name, MAX(age) FROM t;

ERROR 1140 (42000): In aggregated query without GROUP BY, expression

#1 of SELECT list contains nonaggregated column 'mydb.t.name'; this

is incompatible with sql_mode=only_full_group_by

借りるANY_VALUE()これに変更すれば良い:

SELECT ANY_VALUE(name), MAX(age) FROM t;

公式ドキュメントのヒント:各グループに集約されていないカラムの値を選択しない場合は、これが便利です.SUM()またはCOUNT()などの関数とは異なり、ANY_VALUE()集約関数ではありません.不確実性テストを抑制する役割を果たすだけです.
参考リンク:MySQL Handling of GROUP BY
最后恰饭阿里雲全シリーズ製品/メールパック特恵中小企業上雲ベスト選択阿里雲内部クーポン購入