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

Error en MYSQL con mismo código del curso

este código que a mi parecer está igual al mostrado en el curso me da error

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;

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
2 respuestas

Hola,

Gracias por compartir tu experiencia con nosotros. Recuerda que estamos aquí para ayudarte. Si necesitas ayuda, no dudes en buscarnos en el foro.

¡Gracias nuevamente!

Saludos,

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

Buena noche Daniel, efectivamente está tal cual el profe lo escribió en el video y esto tiene dos soluciones, pero se debe entender por qué pasa:

El error que estás viendo es causado por la configuración del modo de SQL de MySQL, específicamente el modo ONLY_FULL_GROUP_BY. Este modo asegura que todas las columnas en la lista SELECT que no están dentro de funciones agregadas (como MIN(), MAX(), SUM(), etc.) deben estar presentes en la cláusula GROUP BY o ser funcionalmente dependientes de las columnas agrupadas. En este caso, la columna SABOR no está agregada ni en la cláusula GROUP BY, lo que genera el error.

Solución 1: Agregar la columna SABOR al GROUP BY

Una forma rápida de solucionar el problema es agregar la columna SABOR al GROUP BY, ya que en una consulta con GROUP BY, todas las columnas que no están dentro de una función agregada deben estar mencionadas en el GROUP BY:

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, **SABOR**,
    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;

Solución 2: Modificar el sql_mode

Otra opción es cambiar el modo de SQL para que no sea tan estricto con el GROUP BY. Si no necesitas una configuración estricta, puedes deshabilitar el modo ONLY_FULL_GROUP_BY ejecutando el siguiente comando (si tienes permisos de administrador):

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

Esto quitaría la restricción de ONLY_FULL_GROUP_BY y te permitiría ejecutar la consulta sin necesidad de modificar el GROUP BY. Sin embargo, esta opción no es la más recomendada si trabajas con bases de datos más complejas o si planeas hacer consultas más avanzadas en el futuro.

¡Saludos!