La requête suivante n'est pas valide avec ONLY_FULL_GROUP_BY
activé. Le premier n'est pas valide car le nom dans la liste de sélection n'est pas nommé dans le GROUP BY
clause
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
sans colonnes GROUP est illégal s'il n'y a pas de clause GROUP BY
Vous pouvez réécrire la requête pour qu'elle fonctionne correctement en tant que
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
ou
Désactivez le ONLY_FULL_GROUP_BY et l'erreur devrait disparaître.
Les liens peuvent vous aider
- Vous pouvez rechercher les erreurs MySQL ici
- group-by-functions
- article similaire sur stackoverflow.com
- un autre forum où un problème similaire a été discuté
- server-sql-mode
MISE À JOUR
Ceci est la réponse à votre commentaire.
But i would like to know more about disabling the Group BY mode in mysql db.
-
Le serveur MySQL peut fonctionner dans différents modes SQL et peut appliquer ces modes différemment pour différents clients, en fonction de la valeur de
sql_mode
variable système. Cette capacité permet à chaque application d'adapter le mode de fonctionnement du serveur à ses propres besoins. -
Pour définir le mode SQL au démarrage du serveur, utilisez le
--sql-mode="modes"
option sur la ligne de commande, ousql-mode="modes"
dans un fichier d'options tel quemy.cnf (Unix operating systems)
oumy.ini (Windows)
. modes est une liste de différents modes séparés par des virgules. Pour effacer explicitement le mode SQL, définissez-le sur une chaîne vide à l'aide de--sql-mode=""
sur la ligne de commande, ousql-mode=""
dans un fichier d'options. -
Pour changer le mode SQL à l'exécution, utilisez un
SET [GLOBAL|SESSION] sql_mode='modes'
instruction pour définir la variable système sql_mode. La définition de la variable GLOBAL nécessite le privilège SUPER et affecte le fonctionnement de tous les clients qui se connectent à partir de ce moment. La définition de la variable SESSION n'affecte que le client actuel. Tout client peut modifier sa propre valeur sql_mode de session à tout moment. -
Pour déterminer la valeur sql_mode globale ou de session actuelle, utilisez les instructions suivantes :
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
Vous pouvez vous référer à la tableau sql_mode
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
Cela se produit à cause de la version de MySQL. Quelle est la version MySQL de votre ordinateur local ?
Comment vérifier la version de MySQL ?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
Pour tester sql_mode ONLY_FULL_GROUP_BY
, j'ai créé la table patient
avec deux colonnes id, name
et les enregistrements insérés. N'oubliez pas sql_mode ONLY_FULL_GROUP_BY
n'est pas défini par défaut, vous devez le définir si vous le souhaitez.
1)MySQL version 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
Cela a échoué, il était inutile de définir sql_mode sur ONLY_FULL_GROUP_BY
car il n'autorisera pas les colonnes non agrégées qui ne sont pas nommées dans la clause GROUP BY.
2)MySQL version 5.1.40-communauté
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Puis après avoir défini 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)Version MySQL 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Puis après avoir défini 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
Conclusion
Comme vous pouvez le voir, la requête a échoué sur la version 5.0.45 et a réussi sur/après la version 5.1.40 et 5.5.28Avant la version MySQL 5.1.10(pas sûr)
requête sans GROUP BY
échoue quel que soit sql_mode ONLY_FULL_GROUP_BY
défini ou non.
Quelques bugs intéressants et lien faq sql_mode
- ONLY_FULL_GROUP_BY sql mode est trop restrictif
- sql-mode :seul le groupe complet par mode ne fonctionne pas
- FAQ MySQL 5.0 :Mode SQL serveur