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

[Sugerencia] compile el codigo de las respuestas de los topicos para poder ejecutar bien esta query y que no salga el error 1055 que nos salio a varios compañeros espero que les sirva

SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; 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;

5 respuestas

Hola Marcos gracias por la información, investigue un poco y una solución fácil y sencilla seria usar la función ANY_VALUE( ) lo cual te permite obtener el valor de una columna en un registro sin importar cual sea el valor que retorne esto es útil para cumplir la sintaxis de SQL pero no cumple el estándar lo cual me parece una chapuza, desde mi punto de vista esos detalles los debería resolver el profesor y realiza las consultas con base en el estándar SQL, dejo el código que utiliza el profesor pero utilizando la funcionANY_VALUE( )

Saludos.

Fuente: https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

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

Hola, les comparto una pequeña simplificación al código anterior.

Saludos.

SELECT  ENVASE, ANY_VALUE(SABOR) AS 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, PRECIO
ORDER BY ENVASE;

Gracoas por la ayuda Marcos, también mne salia el error y con tu código se arregló

gracias! Me funciono eliminando "sabor", sera que da error por que en verdad no se utiliza ese campo? Saludos!!!

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad 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;

Gracias, utilice la función ANY_VALUE ( ) y me funciono sin error.