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)
1
respuesta

Modifiqué la consulta desarrollada en esta actividad y calculé la cantidad de volumen comprado en decilitros por cliente por mes.

Recordemos que la consulta desarrollada en esta actividad lo que hace en realidad es calcular la cantidad de productos adquiridos por determinado cliente por mes y NO CALCULA LA CANTIDAD DE DECILITROS ADQUIRIDOS POR MES
Bien, ahora para que sí lo haga les comparto lo que hice:

Primero creé una copia de la tabla TABLA_DE_PRODUCTOS y la llamé TABLA_DE_PRODUCTOS_COPIA:

CREATE TABLE 
    TABLA_DE_PRODUCTOS_COPIA 
LIKE 
    TABLA_DE_PRODUCTOS;

INSERT INTO TABLA_DE_PRODUCTOS_COPIA SELECT * FROM TABLA_DE_PRODUCTOS;

En la tabla TABLA_DE_PRODUCTOS_COPIA el campo TAMANO es del tipo VARCHAR(10) entonces ese campo ahora representará el volumen de cada producto en decilitros. Para saber los diferentes tamaños de cada producto ejecutamos la siguiente consulta:

SELECT
    DISTINCT(TAMANO)
FROM 
    TABLA_DE_PRODUCTOS_COPIA;

Y establecemos la relación:

  • 700 ml --> 7 dl
  • 1 l --> 10 dl
  • 1.5 l --> 15 dl
  • 2 l --> 20 dl
  • 350 ml --> 3.5 dl
  • 470 ml --> 4.7 dl

Después cambié esos valores de la tabla TABLA_DE_PRODUCTOS_COPIA:

UPDATE
    TABLA_DE_PRODUCTOS_COPIA
SET
    TAMANO = '7' -- 7 dl = 700 ml
WHERE
    TAMANO = '700 ml'; 

UPDATE
    TABLA_DE_PRODUCTOS_COPIA
SET
    TAMANO = '10' -- 10 dl = 1 l
WHERE
    TAMANO = '1 litro'; 

UPDATE
    TABLA_DE_PRODUCTOS_COPIA
SET
    TAMANO = '15' -- 15 dl = 1.5 l
WHERE
    TAMANO = '1,5 litros'; 

UPDATE
    TABLA_DE_PRODUCTOS_COPIA
SET
    TAMANO = '20' -- 20 dl = 2 l
WHERE
    TAMANO = '2 litros'; 

UPDATE
    TABLA_DE_PRODUCTOS_COPIA
SET
    TAMANO = '3.5' -- 3.5 dl = 350 ml
WHERE
    TAMANO = '350 ml'; 

UPDATE
    TABLA_DE_PRODUCTOS_COPIA
SET
    TAMANO = '4.7' -- 4.7 dl = 470 ml
WHERE
    TAMANO = '470 ml'; 

Después agregué una columna nueva en la tabla TABLA_DE_PRODUCTOS_COPIA:

ALTER TABLE
    TABLA_DE_PRODUCTOS_COPIA
ADD COLUMN
    TAMANO_EN_DECILITROS FLOAT; 

Y llené ese campo con los datos del campo TAMANO:

UPDATE
    TABLA_DE_PRODUCTOS_COPIA
SET 
    TAMANO_EN_DECILITROS = CAST(TAMANO AS FLOAT);

Por último borré la columna TAMANO:

ALTER TABLE
    TABLA_DE_PRODUCTOS_COPIA
DROP COLUMN
    TAMANO;

Ahora sí, en la tabla TABLA_DE_PRODUCTOS_COPIA tenemos un campo (TAMANO_EN_DECILITROS) que mide el volumen de cada producto en decilitros y este es útil para hacer cálculos. Todo esto sin alterar la tabla TABLA_DE_PRODUCTOS (que viene siendo la original).

A continuación muestro la consulta que sí devuelve la cantidad total de decilitros adquiridos por determinado cliente por mes:

SELECT     
    ANY_VALUE(TC.NOMBRE) AS CLIENTE, 
    F.DNI,
    DATE_FORMAT(F.FECHA_VENTA, '%m - %Y') AS MES_AÑO,
    ROUND(SUM(IFA.CANTIDAD * TP.TAMANO_EN_DECILITROS), 2) AS VOLUMEN_TOTAL_ADQUIRIDO_EN_DECILITROS,
    ANY_VALUE(TC.VOLUMEN_DE_COMPRA) AS VOLUMEN_DE_COMPRA_MÁXIMO_PERMITIDO_EN_DECILITROS,
    CASE
        WHEN ROUND(SUM(IFA.CANTIDAD * TP.TAMANO_EN_DECILITROS), 2) < ANY_VALUE(TC.VOLUMEN_DE_COMPRA) THEN 'Sí'
        ELSE 'No'
    END AS `¿VENTA VÁLIDA?`
FROM
    FACTURAS F
INNER JOIN
    ITEMS_FACTURAS IFA
ON
    F.NUMERO = IFA.NUMERO
INNER JOIN 
    TABLA_DE_CLIENTES TC
ON
    F.DNI = TC.DNI
INNER JOIN 
    TABLA_DE_PRODUCTOS_COPIA TP
ON
    IFA.CODIGO_DEL_PRODUCTO = TP.CODIGO_DEL_PRODUCTO
GROUP BY
    F.DNI,
    DATE_FORMAT(F.FECHA_VENTA, '%m - %Y');

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

A modo de comparación, esta es la consulta desarrollada en clase:

SELECT     
    ANY_VALUE(TC.NOMBRE) AS CLIENTE, 
    F.DNI,
    DATE_FORMAT(F.FECHA_VENTA, '%m - %Y') AS MES_AÑO,
    SUM(IFA.CANTIDAD) AS CANTIDAD_TOTAL_DE_PRODUCTOS_ADQUIRIDOS,
    ANY_VALUE(TC.VOLUMEN_DE_COMPRA)/10 AS CANTIDAD_MÁXIMA_PERMITIDA,
    CASE
        WHEN SUM(IFA.CANTIDAD) < ANY_VALUE(TC.VOLUMEN_DE_COMPRA)/10 THEN 'Sí'
        ELSE 'No'
    END AS `¿VENTA VÁLIDA?`
FROM
    FACTURAS F
INNER JOIN
    ITEMS_FACTURAS IFA
ON
    F.NUMERO = IFA.NUMERO
INNER JOIN 
    TABLA_DE_CLIENTES TC
ON
    F.DNI = TC.DNI
GROUP BY
    F.DNI,
    DATE_FORMAT(F.FECHA_VENTA, '%m - %Y');

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad
¿Qué opinan de mi análisis? Estaría genial que este análisis lo compartieran con el equipo de Alura y, específicamente, con el ingeniero Álvaro.

1 respuesta
solución!

¡Hola Yahadad!

Tu análisis es muy detallado y parece que has realizado un buen trabajo al adaptar la consulta para calcular el volumen en decilitros. Has seguido un enfoque lógico al crear una copia de la tabla original para trabajar con los datos sin alterar la fuente original. Esto es una buena práctica para evitar problemas en los datos originales.

La conversión de tamaños a decilitros y la actualización de la tabla parecen correctas. Además, tu consulta final para calcular el volumen total adquirido por cliente por mes está bien estructurada y parece cumplir con el objetivo de comparar el volumen adquirido con el máximo permitido.

Una posible mejora podría ser verificar si hay alguna inconsistencia en los datos o en las conversiones realizadas, especialmente si notas algún resultado inesperado. También podrías considerar agregar comentarios en tu código SQL para que otros puedan entender rápidamente lo que cada parte del código hace.

En general, tu enfoque es sólido y tu solución parece cumplir con los requisitos planteados en la actividad. ¡Buen trabajo!

Espero haber ayudado y buenos estudios!