MySQL解決ONLY_FULL_GROUP_BYエラーのいくつかの方法
原文リンク:のブログ
MySQL 5.7以降でいくつか
仮修正ONLY_FULL_GROUP_BYモード
既存のパターンを検索
奥の
プロファイルのONLY_の変更FULL_GROUP_BYモード
見つけた
and_を借りてvalue()関数は、グループに参加していないカラムを無視します.
例:
借りる
公式ドキュメントのヒント:各グループに集約されていないカラムの値を選択しない場合は、これが便利です.
参考リンク:MySQL Handling of 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
最后恰饭阿里雲全シリーズ製品/メールパック特恵中小企業上雲ベスト選択阿里雲内部クーポン購入