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

[Sugerencia] Cómo corregir el Error 1055 de la última consulta (la que usa CASE)

Hola. He visto que algunos reportan problemas con la última consulta que aparece en los videos del aula 3 (y la última de Haga lo que hicimos en aula). Ya respondí en otro tópico, pero me parece importante que aparezca en la lista del foro, ya que donde respodí puede que no pongan que el problema se solucionó. El código es:

SELECT ENVASE, SABOR,
CASE
   WHEN PRECIO_DE_LISTA >= 12 THEN 'Costoso'
   WHEN PRECIO_DE_LISTA >= 5 AND PRECIO_DE_LISTA < 12 THEN 'Asequible'
   ELSE 'Barato'
END AS PRECIO, MIN(PRECIO_DE_LISTA) AS PRECIO_MINIMO
FROM tabla_de_productos
WHERE TAMANO = '700 ml'
GROUP BY ENVASE,
CASE
   WHEN PRECIO_DE_LISTA >= 12 THEN 'Costoso'
   WHEN PRECIO_DE_LISTA >= 5 AND PRECIO_DE_LISTA < 12 THEN 'Asequible'
   ELSE 'Barato'
END
ORDER BY ENVASE;

En algunos casos la consulta da un error: Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'jugos_ventas.tabla_de_productos.SABOR' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

El problema aparece en la última parte (sql_mode=only_full_group_by) y esto tiene que ver cómo funciona el motor de MYSQL (hasta donde yo lo entiendo). Este no era el modo por default en versiones de MYSQL anteriores a la 8.0.15 (tal vez haya alguna versión anterior donde esto tampoco funciona por default, lo que encontré es a partir de esta versión). Para que la consulta funcione tal cual está, hay que cambiar el modo, corriendo la siguiente sentencia antes de la consulta:

SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

NOTA: Esto cambia el modo en la sesión, pero no es permanente (si reinician la computadora o el servicio de mysql vuelve a como estaba antes).

La solución la encontré en este link: https://clientes.digital-express.com.ar/support/solutions/articles/48001187649-mysql-error-1055-group-by

Espero sirva. Saludos.

3 respuestas

¡Hola Paulo!

Gracias por compartir tu sugerencia y la solución al problema que encontraste en la última consulta. Es genial que hayas encontrado una solución y que estés dispuesto a compartirla con los demás en el foro.

El error que estás experimentando se debe a un cambio en el modo de funcionamiento de MySQL a partir de la versión 8.0.15. Para que la consulta funcione correctamente, es necesario cambiar el modo de MySQL antes de ejecutarla. Sin embargo, ten en cuenta que este cambio solo será válido para la sesión actual y no será permanente.

Aquí está la sentencia que debes ejecutar antes de la consulta:

SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

Recuerda que si reinicias tu computadora o el servicio de MySQL, el modo volverá a su configuración anterior.

Espero que esta solución te sea útil y que puedas corregir el error en tu consulta. Si tienes alguna otra pregunta, no dudes en hacerla.

¡Espero haber ayudado y buenos estudios!

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

GRACIAS! PAOLO POR TU APORTE.

Gracias por el aporte