Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Proyecto] Script en ml

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;

Image Workbench

1 respuesta

¡Hola Christian! ¿Cómo estás?

Gracias por tu aporte en el foro. Su contribución es esencial para el crecimiento de nuestra comunidad en Alura.

Sigue así y no dudes en volver al foro si tienes alguna pregunta o dificultad.

Abrazos y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!