1055: Expression not in GROUP BY (only_full_group_by)(GROUP BY にない式)
MySQL意味
GROUP BY にも集約関数にも含まれていない列が、SELECT リストまたは HAVING/ORDER BY で使用された。ONLY_FULL_GROUP_BY SQL モードが有効なため、MySQL はこの非決定的な式を拒否する。
原因
クエリがグループ化列以外の列を直接選択しているが、その列はグループごとに単一の値を持つとは限らない。MySQL 5.7+ では ONLY_FULL_GROUP_BY がデフォルトで有効であり、古い寛容な GROUP BY の動作に依存するクエリはこのエラーになる。
対処方法
列を GROUP BY リストに追加するか、集約関数 (MAX()、MIN()、ANY_VALUE()) で囲む。値がグループ内で本当に一意であると分かっている場合、ANY_VALUE() で意図的にあいまいさを抑止できる。クエリを修正せずにモードを無効にする (sql_mode から ONLY_FULL_GROUP_BY を削除する) と、誤った結果のリスクが戻るため避ける。
同じデータベースの他の項目
- 1553Cannot drop index needed in a foreign key constraint(外部キー制約で必要なインデックスは削除できない)
- 3948Loading local data is disabled; this must be enabled on both the client and server sides(ローカルデータの読込みは無効。クライアントとサーバーの両側で有効化が必要)
- 1075Incorrect table definition; there can be only one auto column and it must be defined as a key(不正なテーブル定義。自動採番列は 1 つのみでキーとして定義が必要)
- 1267Illegal mix of collations(照合順序の不正な混在)
- 1030Got error N from storage engine(ストレージエンジンからエラー N を受け取った)
- 1197Multi-statement transaction required more than 'max_binlog_cache_size'(複数文トランザクションが 'max_binlog_cache_size' を超える領域を必要とした)
- 1785Statement violates GTID consistency(文が GTID 整合性に違反)