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

[Duda] Estoy confundido

La querty del profe fue, y corrijan si estoy en lo incorrecto:

SELECT ENVASE, SABOR,
    CASE
        WHEN PRECIO_DE_LISTA >= 12 THEN 'Costoso'
        WHEN PRECIO_DE_LISTA >= 5 AND PRECIO_DE_LISTA < 12 THEN 'Asequbile'
        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 'Asequbile'
        ELSE 'Barato'
    END 
ORDER BY ENVASE;

Y para él funcionó, pero para mí no. ¿Por qué? Obtuve un error 1055.

La "solución" fue agregar SABOR al GROUP BY como lo siguiente:

SELECT ENVASE, SABOR,
    CASE
        WHEN PRECIO_DE_LISTA >= 12 THEN 'Costoso'
        WHEN PRECIO_DE_LISTA >= 5 AND PRECIO_DE_LISTA < 12 THEN 'Asequbile'
        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 'Asequbile'
        ELSE 'Barato'
    END 
ORDER BY ENVASE;

Sin embargo, las entradas que retorna son diferentes, ¿Estoy mal? Sinceramente creo que mi retorno es más afín a lo que se está intentando buscar.

2 respuestas
solución!

Todo apunta a que el profesor tiene deshabilitada la funcion "only_full_group_by", despues de vueltas, de ensayo y error encontre que si no seleccionamos sabor, este nos muestra el resultado que se visualiza en pantalla de la clase (sin el sabor claramente):

SELECT ENVASE,
    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;

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

Si seleccionamos Sabor y en Group By se nos obliga a o ponerlo, la funcion busca todos los sabores, los agrupa y mira quien tiene el valor minimo por sabor

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;

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

Si observas, el cumple la condicion: selecciona los campos envase y sabor, dependiendo del valor, agrega un campo "precio" y asignale un valor "costoso, asequible y barato", luego busca el valor minimo del precio de lista, pero solamente a los que el tamaño corresponda a 700 ml, luego agrupalos tanto en precio como en sabor .... y asi susesivamente.

aca mismo en el post, un compañero lo explico en excel https://app.aluracursos.com/forum/topico-sugerencia-para-la-ultima-consulta-161700

Oh, ya entiendo. Muchas gracias