1
respuesta

3.12 USANDO CASE

Buenas tardes, para poder realizar la consulta que realiza el profesor en este punto del curso, tuve que realizar una modificación en la cláusula GROUP BY, si mebargo no obtengo el mismo resultado que se ve en el video.- Mi consulta (modificada) es la siguiente:

SELECT envase, sabor,
    CASE
        WHEN precio_de_lista >= 12 THEN 'Costoso'
        WHEN precio_de_lista >= 5 AND precio_de_lista < 12 THEN 'Precio regular'
        ELSE 'Barato'
    END AS clasificacion_precio, MIN(precio_de_lista) AS precio_minimo
FROM tabla_de_productos
WHERE tamano = '700 ml'
GROUP BY envase, sabor, precio_de_lista,
    CASE
        WHEN precio_de_lista >= 12 THEN 'Costoso'
        WHEN precio_de_lista >= 5 AND precio_de_lista < 12 THEN 'Precio regular'
        ELSE 'Barato'
    END
ORDER BY precio_de_lista;

select * from tabla_de_productos where tamano = '700 ml';

La cual arroja el siguiente resultado: Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Por otro lado, la consulta y resultado del profesor es la siguiente: Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadEl problema es que si utilizo la consulta como fue realizada en el video explicativo, obtengo el siguiente error: Error Code: 1055. Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'jugosventas.tabladeproductos.PRECIODELISTA' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sqlmode=onlyfullgroupby

Quisiera saber:

  • Si me pueden explicar que significa el error, ya que no entiendo a que se refiere.-
  • Si me pueden explicar por que mi consulta arroja un resultado diferente Muchas gracias!
1 respuesta

Hola Matias, espero que este bién

Entiendo que estás teniendo algunos problemas al intentar realizar una consulta utilizando la cláusula CASE en SQL. Permíteme ayudarte a entender el error y por qué obtienes un resultado diferente al del profesor.

El error que estás recibiendo, "Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column", significa que estás intentando ordenar los resultados por una columna que no está incluida en la cláusula GROUP BY y que no es una columna agregada. En tu consulta, estás intentando ordenar los resultados por la columna "precio_de_lista", que no está en la cláusula GROUP BY ni es una columna agregada.

Para solucionar este error, debes incluir la columna "precio_de_lista" en la cláusula GROUP BY o utilizar una función de agregación, como MIN(precio_de_lista), en la cláusula ORDER BY. Por ejemplo, podrías modificar tu consulta de la siguiente manera:

SELECT envase, sabor,
    CASE
        WHEN precio_de_lista >= 12 THEN 'Costoso'
        WHEN precio_de_lista >= 5 AND precio_de_lista < 12 THEN 'Precio regular'
        ELSE 'Barato'
    END AS clasificacion_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 'Precio regular'
        ELSE 'Barato'
    END
ORDER BY MIN(precio_de_lista);

Esto debería solucionar el error y permitirte obtener los resultados esperados.

En cuanto a la diferencia en los resultados entre tu consulta y la del profesor, podría haber varias razones. Te recomendaría revisar los datos en tu tabla y asegurarte de que sean consistentes con los del profesor. También verifica si has realizado algún cambio adicional en tu consulta que pueda estar afectando los resultados.

Espero que esta explicación te ayude a entender el error y la diferencia en los resultados. Si tienes alguna otra pregunta, no dudes en hacerla. ¡Estoy aquí para ayudarte!

Espero haber ayudado y ¡buenos estudios!

Un saludo.

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios
Hola , espero que estés muy bien.