La siguiente consulta no es válida con ONLY_FULL_GROUP_BY
activado. El primero no es válido porque el nombre en la lista de selección no se menciona en GROUP BY
cláusula
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
sin columnas GROUP es ilegal si no hay una cláusula GROUP BY
Puede volver a escribir la consulta para que funcione bien como
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
o
Desactive ONLY_FULL_GROUP_BY y el error debería desaparecer.
Los enlaces pueden ayudarte
- Puede buscar errores de MySQL aquí
- group-by-functions
- publicación similar en stackoverflow.com
- otro foro donde se discutió un problema similar
- server-sql-mode
ACTUALIZAR
Esta es la respuesta a tu comentario.
But i would like to know more about disabling the Group BY mode in mysql db.
-
El servidor MySQL puede operar en diferentes modos SQL y puede aplicar estos modos de manera diferente para diferentes clientes, dependiendo del valor de
sql_mode
variable del sistema. Esta capacidad permite que cada aplicación adapte el modo operativo del servidor a sus propios requisitos. -
Para establecer el modo SQL al inicio del servidor, use
--sql-mode="modes"
opción en la línea de comando, osql-mode="modes"
en un archivo de opciones comomy.cnf (Unix operating systems)
omy.ini (Windows)
. modos es una lista de diferentes modos separados por comas. Para borrar el modo SQL explícitamente, configúrelo en una cadena vacía usando--sql-mode=""
en la línea de comando, osql-mode=""
en un archivo de opciones. -
Para cambiar el modo SQL en tiempo de ejecución, use un
SET [GLOBAL|SESSION] sql_mode='modes'
declaración para establecer la variable de sistema sql_mode. Configurar la variable GLOBAL requiere el privilegio SUPER y afecta al funcionamiento de todos los clientes que se conecten a partir de ese momento. La configuración de la variable SESSION afecta solo al cliente actual. Cualquier cliente puede cambiar su propio valor de sesión sql_mode en cualquier momento. -
Para determinar el valor sql_mode global o de sesión actual, use las siguientes declaraciones:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
Puede consultar tabla sql_mode
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
Esto sucede debido a la versión de MySQL. ¿Cuál es la versión de MySQL de su computadora local?
¿Cómo comprobar la versión de MySQL?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
Para probar sql_mode ONLY_FULL_GROUP_BY
, creé la tabla patient
con dos columnas id, name
y registros insertados. Recuerde sql_mode ONLY_FULL_GROUP_BY
no está configurado por defecto, debe configurarlo si lo desea.
1) Versión de 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
Falló, no tenía sentido establecer sql_mode en ONLY_FULL_GROUP_BY
ya que no permitirá columnas no agregadas que no estén nombradas en la cláusula GROUP BY.
2) Versión de MySQL 5.1.40-comunidad
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Luego, después de configurar 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) Versión de MySQL 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Luego, después de configurar 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
Conclusión
Como puede ver, la consulta falló en la versión 5.0.45 y tuvo éxito en/después de 5.1.40 y 5.5.28 Antes de la versión de MySQL 5.1.10(no estoy seguro)
consulta sin GROUP BY
falla independientemente de sql_mode ONLY_FULL_GROUP_BY
establecido o no.
Algunos errores interesantes y enlace de preguntas frecuentes de sql_mode
- ONLY_FULL_GROUP_BY el modo sql es demasiado restrictivo
- sql-mode:solo el grupo completo por modo no funciona
- Preguntas frecuentes de MySQL 5.0:Modo SQL del servidor