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');
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');

¿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.