'%s' isn't in GROUP BY

提供:MySQL Practice Wiki

移動: 案内, 検索

エラー概要

MySQLエラー番号 1055
SQLSTATE 42000
エラー名 ER_WRONG_FIELD_WITH_GROUP
メッセージ '%s' isn't in GROUP BY
障害部位 mysqld
該当バージョン any
エラーの原因 sql_modeにONLY_FULL_GROUP_BYが指定されているときに発生する可能性がある。詳細は以下を参照。
対策 以下を参照。
備考 nada

目次

原因

sql_modeONLY_FULL_GROUP_BYが指定されている場合、フィールドリストに不正なカラム(つまりGROUP BYで指定されていないカラム)があるSQL文を弾くようになる。例えば次のようなSQL文である。

mysql> SELECT c1, MAX(c1) FROM t1 GROUP BY c2;

このクエリは不正である。なぜなら、c1はGROUP BYで指定されていないため、結果は不定となる。本来、SQL文ではGROUP BY句がある場合、GROUP BY句にあるカラムか、集計関数を用いた結果しかSELECTのフィールドリストに含めることが出来ないからである。

対処法

適切なSQL文を書くこと。上のSQL文は次のように書き直すべきである。

mysql> SELECT c2, MAX(c1) FROM t1 GROUP BY c2;

また、前者のような不正なクエリを正常に察知するためにも、ONLY_FULL_GROUP_BYというsql_modeは常に利用するようにしておくといいだろう。sql_modeはmy.cnfにも書いておくことが出来るので、[mysqld]セクションに記述しておこう。

[mysqld]
sql_mode=ONLY_FULL_GROUP_BY

参考URL