1
respuesta

[Duda] Clase 12 CASE Duda ?

CLASE 12 En esta clase se hizo dos ejemplos usando CASE, el primero me sale bien, mire.

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Sin embargo, al intentar hacer el segundo ejemplo usando el CASE dentro del group by me da error.

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Esta es la consulta que escribí.

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;

Al profesor si le sale, ¿QUÉ ESTOY HACIENDO MAL O ME PODRÍAN EXPLICAR POR QUÉ NO ME FUNCIONA? GRACIAS.

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

¡Hola Paul, espero que estés bien!

El MySQL solo permite un GROUP BY con todos los atributos que estan en SELECT también entonces por lo que mostra ese error.

  1. Una sugerencia para nuestro ejemplo - ya que solo tenemos un valor asignado a la columna ENVASE, es agregar el atributo SABOR al GROUP BY.

  2. Otra sugerencia es desactivar la opción ONLY_FULL_GROUP, que está activada por defecto, es responsable justamente de esta regla de relación entre atributos de GROUP BY y SELECT. Puedes ejecutar este codigo que mostra todo las formas activadas de tu SQL y luego borra la forma ONLY_FULL_GROUP_BY:

SELECT @@sql_mode;
SET @@sql_mode = SYS.LIST_DROP(@@sql_mode, 'ONLY_FULL_GROUP_BY');

Espero que esta solución te sea útil. Si tienes alguna otra pregunta, no dudes en hacerla. ¡Estoy aquí para ayudarte!

¡Espero haber ayudado y buenos estudios!

¡Vamos juntos!

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