Por el comentario de un compañero, decidí buscar la solución.La mejor solución que encontre sin modificar la tabla original, fue crear una tabla temporaria:
SET SQL_SAFE_UPDATES = 0;
CREATE TEMPORARY TABLE temp_productos_ml AS
SELECT * FROM tabla_de_productos;
-- Añadir la columna tamano_ml
ALTER TABLE temp_productos_ml
ADD COLUMN tamano_ml DECIMAL(10,2);
-- Actualizar la columna tamano_ml
UPDATE temp_productos_ml
SET tamano_ml =
CASE
WHEN tamano LIKE '%litro%' THEN CAST(REPLACE(tamano, ' litro', '') AS DECIMAL(10,2)) * 1000
WHEN tamano LIKE '%ml%' THEN CAST(REPLACE(tamano, ' ml', '') AS DECIMAL(10,2))
ELSE NULL -- O algún valor por defecto, como 0
END;
SET SQL_SAFE_UPDATES = 1;
Luego modifique el ultimo ejercico del profe:
SELECT
ventas_sabor.sabor,
ventas_sabor.año,
ventas_sabor.cantidad_total,
ventas_sabor.cantidad_ml_total,
ROUND((ventas_sabor.cantidad_total / venta_total.cantidad_total) * 100, 2) AS Porcentaje_Cantidad,
ROUND((ventas_sabor.cantidad_ml_total / venta_total.cantidad_ml_total) * 100, 2) AS Porcentaje_ML
FROM
(
SELECT
p.sabor,
SUM(i.cantidad) AS Cantidad_Total,
SUM(i.cantidad * (
CASE
WHEN p.tamano LIKE '%litro%' THEN CAST(REPLACE(p.tamano, ' litro', '') AS DECIMAL(10, 2)) * 1000
WHEN p.tamano LIKE '%ml%' THEN CAST(REPLACE(p.tamano, ' ml', '') AS DECIMAL(10, 2))
ELSE 0 -- O un valor por defecto si el tamaño no está en litros o ml
END
)) AS Cantidad_ML_Total,
YEAR(f.fecha_venta) AS Año
FROM
tabla_de_productos p
INNER JOIN items_facturas i ON p.CODIGO_DEL_PRODUCTO = i.CODIGO_DEL_PRODUCTO
INNER JOIN facturas f ON f.numero = i.numero
WHERE
YEAR(f.fecha_venta) = 2016
GROUP BY
p.sabor,
YEAR(f.fecha_venta)
ORDER BY
Cantidad_Total DESC
) AS Ventas_Sabor -- unimos la consulta cantidad vendida x sabor 2016
INNER JOIN (
SELECT
SUM(i.cantidad) AS Cantidad_Total,
SUM(i.cantidad * (
CASE
WHEN p.tamano LIKE '%litro%' THEN CAST(REPLACE(p.tamano, ' litro', '') AS DECIMAL(10, 2)) * 1000
WHEN p.tamano LIKE '%ml%' THEN CAST(REPLACE(p.tamano, ' ml', '') AS DECIMAL(10, 2))
ELSE 0 -- O un valor por defecto si el tamaño no está en litros o ml
END
)) AS Cantidad_ML_Total,
YEAR(f.fecha_venta) AS Año
FROM
tabla_de_productos p
INNER JOIN items_facturas i ON p.CODIGO_DEL_PRODUCTO = i.CODIGO_DEL_PRODUCTO
INNER JOIN facturas f ON f.numero = i.numero
WHERE
YEAR(f.fecha_venta) = 2016
GROUP BY
YEAR(f.fecha_venta)
ORDER BY
Cantidad_Total DESC
) AS Venta_Total ON Venta_Total.año = Ventas_Sabor.año -- las relaciona el 'año'
ORDER BY
ventas_sabor.cantidad_total DESC;