Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

Error Code: 1055. Expression #2

Cuando se creaba la consulta para el problema que dejaban, la logica hacia construir un query de la siguiente forma.

SELECT c.nombre, concat('El cliente ', c.nombre, ' facturo ', floor(sum(i.cantidad * i.precio)), ' en el ', date_format(f.fecha_venta, "%Y")) as resultado FROM facturas f INNER JOIN clientes c on c.dni = f.dni INNER JOIN items_facturas i on f.numero = i.numero WHERE year(f.fecha_venta) = 2016 GROUP BY c.nombre, year(f.fecha_venta);

Este código al ejecutarse daba eror.

Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'jugos.f.FECHA_VENTA' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Para solucionar el error, se ha tenido que cambiar el SQL Mode.

SELECT @@sql_mode;

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

Ya con esto se obtiene el resultado deseado, pero mi pregunta va por que se genera el error. pues de curioso construí el código por partes y cuando en el select incluía el concatenado la fecha es cuando me generaba el error. Si alguien sabe puede explicarlo.

2 respuestas
solución!

¡Hola Steve!

El error que estás experimentando se debe a una configuración llamada "sql_mode" en MySQL. El modo estricto de agrupación, "only_full_group_by", está habilitado de forma predeterminada en versiones más recientes de MySQL. Este modo requiere que todas las columnas en la cláusula SELECT estén incluidas en la cláusula GROUP BY o sean agregadas con una función de agregación, como SUM o COUNT.

En tu consulta, estás utilizando la función CONCAT para concatenar el nombre del cliente con otros valores, incluyendo la columna "f.fecha_venta". Sin embargo, esta columna no está incluida en la cláusula GROUP BY ni se utiliza una función de agregación en ella, lo que provoca el error.

La solución que encontraste, cambiar el modo de SQL, desactiva el modo estricto de agrupación y permite que la consulta se ejecute sin errores. Sin embargo, es importante tener en cuenta que esto puede ocultar otros problemas en tu consulta y no se recomienda desactivar el modo estricto de agrupación en entornos de producción.

Para resolver el error sin desactivar el modo estricto de agrupación, puedes incluir la columna "f.fecha_venta" en la cláusula GROUP BY o utilizar una función de agregación en ella, si es necesario para tu lógica de negocio.

Espero que esto aclare tus dudas. Si tienes alguna otra pregunta, estaré encantado de ayudarte.

¡Espero haber ayudado y buenos estudios!

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

Muchas gracias por tu respuesta, super clara y muy didáctica.

Voy ejecutar y te aviso como me fue.