次のクエリはONLY_FULL_GROUP_BY
では無効です 有効。選択リストの名前がGROUP BY
で指定されていないため、最初の名前は無効です。 条項
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
GROUP BY句がない場合、GROUP列がないことは不正です
クエリを書き直して、
として正常に機能するようにすることができますmysql> SELECT name, MAX(age) FROM t GROUP BY name;
または
ONLY_FULL_GROUP_BY をオフにします エラーが消えるはずです。
リンクが役立つ場合があります
- MySQLエラーを検索できます
ここ - group-by-functions >
- stackoverflow.comへの同様の投稿
- 同様の問題が議論された別のフォーラム
- server-sql-mode
更新
これはあなたのコメントへの答えです。
But i would like to know more about disabling the Group BY mode in mysql db.
-
MySQLサーバーはさまざまなSQLモードで動作でき、
sql_mode
の値に応じて、これらのモードをクライアントごとに異なる方法で適用できます。 システム変数。この機能により、各アプリケーションはサーバーの動作モードを独自の要件に合わせて調整できます。 -
サーバーの起動時にSQLモードを設定するには、
--sql-mode="modes"
を使用します コマンドラインのオプション、またはsql-mode="modes"
my.cnf (Unix operating systems)
などのオプションファイル内 またはmy.ini (Windows)
。 modeは、コンマで区切られたさまざまなモードのリストです。 SQLモードを明示的にクリアするには、--sql-mode=""
を使用してSQLモードを空の文字列に設定します コマンドラインで、またはsql-mode=""
オプションファイルで。 -
実行時にSQLモードを変更するには、
を使用しますSET [GLOBAL|SESSION] sql_mode='modes'
sql_modeシステム変数を設定するステートメント。 GLOBAL変数を設定するには、SUPER特権が必要です それ以降に接続するすべてのクライアントの動作に影響します。 SESSION変数の設定は、現在のクライアントにのみ影響します。すべてのクライアントは、いつでも独自のセッションsql_mode値を変更できます。 -
現在のグローバル値またはセッションsql_mode値を判別するには、次のステートメントを使用します。
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
sql_modeテーブル を参照できます。
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
これは、MySQLのバージョンが原因で発生します。ローカルコンピュータのMySQLバージョンは何ですか?
MySQLのバージョンを確認する方法は?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
sql_mode ONLY_FULL_GROUP_BY
をテストする場合 、テーブルpatient
を作成しました 2列のid, name
挿入されたレコード。 sql_mode ONLY_FULL_GROUP_BY
を覚えておいてください はデフォルト設定ではありません。必要に応じて設定する必要があります。
1)MySQLバージョン 5.0.45-community-nt
SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
失敗しました。sql_modeをONLY_FULL_GROUP_BY
に設定しても意味がありませんでした。 GROUPBY句で指定されていない非集計列は許可されないためです。
2)MySQLバージョン5.1.40-コミュニティ
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
次に、sql_mode ONLY_FULL_GROUP_BY
を設定した後
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
3)MySQLバージョン 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
次に、sql_mode ONLY_FULL_GROUP_BY
を設定した後
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
結論
ご覧のとおり、クエリはバージョン5.0.45で失敗し、5.1.40および5.5.28以降で成功します。MySQLバージョンより前 5.1.10(わからない)
GROUP BY
なしのクエリ sql_mode ONLY_FULL_GROUP_BY
に関係なく失敗します 設定するかどうか。
いくつかの興味深いバグとsql_modeのよくある質問のリンク