'%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_modeにONLY_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