DBAtlas · データベース運用アトラス

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 を削除する) と、誤った結果のリスクが戻るため避ける。

DBAtlas で開く →

同じデータベースの他の項目