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

[Sugerencia] La última consulta de la clase no tiene sentido

Y propongo otra en su lugar pero antes de eso quiero demostrarles porque no tiene sentido la última consulta de la clase:
La última consulta que ejecuta el ingeniero Álvaro 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 'ASEQUIBLE'
        ELSE 'BARATO'
    END AS PRECIO_SUBJETIVO, 
    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
NOTA: En el foro de esta clase hay muchas publicaciones acerca de que varios compañeros no pueden ejecutar la consulta y les marca error y ese error es porque al momento de agrupar les falta agregar el campo SABOR.

Ahora analicemos de forma analítica la tabla TABLA_DE_PRODUCTOS:

  • ¿Cuántos productos hay que contengan 700 ml?
SELECT
    COUNT(*) AS PRODUCTOS_DE_700_ML
FROM 
    TABLA_DE_PRODUCTOS
WHERE 
    TAMANO = '700 ML';

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

  • ¿Cuántos productos distintos hay por envase y sabor que contengan 700 ml?
SELECT
    COUNT(DISTINCT ENVASE, SABOR) AS PRODUCTOS_DE_700_ML
FROM 
    TABLA_DE_PRODUCTOS
WHERE 
    TAMANO = '700 ML';

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad
Ahora analicémoslo de forma visual:

SELECT
    ENVASE, 
    SABOR
FROM 
    TABLA_DE_PRODUCTOS
WHERE 
    TAMANO = '700 ML'
ORDER BY 
    SABOR;

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad
Entonces podemos concluir que si agrupamos por envase y por sabor el resultado consistirá en 10 agrupamientos con un solo registro; o sea, prácticamente lo mismo que la consulta anterior.
Bien, ahora analicemos el uso del CASE:

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_SUBJETIVO
FROM 
    TABLA_DE_PRODUCTOS
WHERE 
    TAMANO = '700 ML'
ORDER BY SABOR;

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad
El resultado es el mismo que el que ejecuta el ingeniero Álvaro pero sin el uso de GROUP BY por lo tanto no tiene sentido este ejercicio. Sí lo tendría si hubieran más registros o más campos en la tabla TABLA_DE_PRODUCTOS
Igual quiero aclarar que la función de agregación MIN(PRECIO_DE_LISTA) tampoco tiene nada de sentido ya que esa función se aplica a un solo registro.
Entiendo que el ingeniero ejecuta toda esa consulta porque quiere demostrar que podemos juntar todo lo que hemos estado aprendiendo a lo largo de este curso pero considero que debe ser un ejemplo que sí tenga sentido.

Ahora comparto mi propuesta:
Como ya demostramos que tenemos solo 10 productos de tamaño 470 ml y todos ellos son de botella de vidrio, entonces lo mejor es agruparlos por su precio subjetivo (COSTOSO, ASEQUIBLE y BARATO)

SELECT 
    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_SUBJETIVO,
    COUNT(*) AS CANTIDAD,
    GROUP_CONCAT(NOMBRE_DEL_PRODUCTO, ', ', SABOR, ', ', PRECIO_DE_LISTA 
                ORDER BY PRECIO_DE_LISTA DESC 
                SEPARATOR '\n') AS PRODUCTOS,
    MIN(PRECIO_DE_LISTA) AS PRECIO_MINIMO,
    MAX(PRECIO_DE_LISTA) AS PRECIO_MAXIMO,
    ROUND(AVG(PRECIO_DE_LISTA), 2) AS PRECIO_PROMEDIO
FROM 
    TABLA_DE_PRODUCTOS
WHERE 
    TAMANO = '700 ML'
GROUP BY 
    PRECIO_SUBJETIVO;

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