Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

ERROR 1055 GROUP BY

Buenas tardes!

Estoy teniendo un error al ejecutar una sentencia tal cual la está implementando el profesor en el video

El profesor ejecuta correctamente esta sentencia:

SELECT BARRIO, CIUDAD, MAX(LIMITE_DE_CREDITO) AS MAXIMO
FROM tabla_de_clientes
GROUP BY BARRIO;

Cuando intento ejecutarla me da el siguiente error:

13:06:07 SELECT BARRIO, CIUDAD, MAX(LIMITE_DE_CREDITO) AS MAXIMO FROM tabla_de_clientes GROUP BY BARRIO LIMIT 0, 1000 Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'jugos_ventas.tabla_de_clientes.CIUDAD' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 0.000 sec

Si ejecuto esta sentencia el agrupamiento se realiza correctamente:

SELECT BARRIO, CIUDAD, MAX(LIMITE_DE_CREDITO) AS MAXIMO
FROM tabla_de_clientes
WHERE CIUDAD = 'Ciudad de México'
GROUP BY BARRIO;

Estuve investigando y aparentemente se trata de una configuración en este parámetro:
sql_mode=only_full_group_by

Pero no logro dar con la solución, siguiendo paso a paso los pasos realziados por el profesor en el video "Usando GROUP BY" en el minuto 15:00

El mismo error me da cuando intento ejecutar la siguiente sentencia, la cual el profesor ejecuta correctamente

SELECT BARRIO, CIUDAD, MAX(LIMITE_DE_CREDITO) AS MAXIMO
FROM tabla_de_clientes
WHERE EDAD >= 20
GROUP BY BARRIO, ESTADO
ORDER BY EDAD;

Adjunto captura de lo que realiza el profesor:

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad
Adjunto captura de lo que me figura cuando ejecuto la sentencia
Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

¿Me podrían ayudar a resolverlo?
Intenté cambiando el campo de agrupamiento pero el error persiste

Muchas gracias

2 respuestas

Actualizo:

Encontré que ejecutando la sentencia:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

el código se ejecuta correctamente.

¿Existe alguna forma de configurar esa propiedad internamente en Mysql para que quede definitivo?

Hola, espero que este bien

Por qué falla?

ONLY_FULL_GROUP_BY obliga a que todas las columnas del SELECT estén en el GROUP BY o dentro de funciones agregadas (MAX(), SUM(), etc.).

Hay algunas soluciones:

A. Solo para tu sesión (temporal):

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

B. Permanente (recomendado si querés que siempre funcione):

  1. Editar el archivo de configuración de MySQL:
  • Linux/Mac: /etc/mysql/my.cnf o /etc/my.cnf
  • Windows: my.ini

Agregar/modificar en [mysqld]:

[mysqld]
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_ENGINE_SUBSTITUTION

Solo elimina ONLY_FULL_GROUP_BY.

  1. Reiniciar MySQL.

  2. Verificar:

SELECT @@GLOBAL.sql_mode;

Tip: Lo ideal es mantener ONLY_FULL_GROUP_BY y usar ANY_VALUE() o agregar todas las columnas necesarias al GROUP BY.


Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!