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

[Duda] Script

CREATE DEFINER=`root`@`localhost` PROCEDURE `comparacion_ventas`(IN fecha1 DATE, IN fecha2 DATE)
BEGIN
 DECLARE total_venta_fecha1 DECIMAL(10,2);
    DECLARE total_venta_fecha2 DECIMAL(10,2);
    DECLARE variacion_porcentual DECIMAL(10,2);
    DECLARE resultado VARCHAR(10);

    -- Calcular las ventas totales para la primera fecha
    SELECT COALESCE(SUM(B.CANTIDAD * B.PRECIO), 0) INTO total_venta_fecha1 
    FROM facturas A 
    INNER JOIN items_facturas B ON A.NUMERO = B.NUMERO 
    WHERE A.FECHA_VENTA = fecha1;

    -- Calcular las ventas totales para la segunda fecha
    SELECT COALESCE(SUM(B.CANTIDAD * B.PRECIO), 0) INTO total_venta_fecha2 
    FROM facturas A 
    INNER JOIN items_facturas B ON A.NUMERO = B.NUMERO 
    WHERE A.FECHA_VENTA = fecha2;

    -- Calcular la variación porcentual
    IF total_venta_fecha1 = 0 THEN
        SET variacion_porcentual = 100; -- Si no hay ventas en fecha1, consideramos un cambio del 100%
    ELSE
        SET variacion_porcentual = ((total_venta_fecha2 - total_venta_fecha1) / total_venta_fecha1) * 100;
    END IF;

    -- Determinar el resultado basado en la variación porcentual
    IF variacion_porcentual > 10 THEN
        SET resultado = 'Verde';
    ELSEIF variacion_porcentual >= -10 AND variacion_porcentual <= 10 THEN
        SET resultado = 'Amarillo';
    ELSE
        SET resultado = 'Rojo';
    END IF;

    -- Devolver el resultado
    SELECT resultado AS Estado_Ventas, total_venta_fecha1 AS Total_Venta_Fecha1, total_venta_fecha2 AS Total_Venta_Fecha2;

END
CALL comparacion_ventas('2015-01-01', '2015-01-15');

Imagen WorkbenchP/D: Estaria bueno que aclaren, cual de los archivos hay que ir bajando de las tablas, para los que en mi caso, vamos codeando el codigo, a medida que vemos los videos. Gracias!!!

1 respuesta

¡Hola Christian!

Para resolver tu duda sobre el script del Stored Procedure comparacion_ventas, aquí tienes una posible solución:

DELIMITER //

CREATE PROCEDURE comparacion_ventas (IN fecha1 DATE, IN fecha2 DATE)
BEGIN
    DECLARE total_venta_fecha1 DECIMAL(10,2);
    DECLARE total_venta_fecha2 DECIMAL(10,2);
    DECLARE variacion_porcentual DECIMAL(10,2);
    DECLARE resultado VARCHAR(10);

    -- Calcular las ventas totales para la primera fecha
    SELECT COALESCE(SUM(B.CANTIDAD * B.PRECIO), 0) INTO total_venta_fecha1 
    FROM facturas A 
    INNER JOIN items_facturas B ON A.NUMERO = B.NUMERO 
    WHERE A.FECHA_VENTA = fecha1;

    -- Calcular las ventas totales para la segunda fecha
    SELECT COALESCE(SUM(B.CANTIDAD * B.PRECIO), 0) INTO total_venta_fecha2 
    FROM facturas A 
    INNER JOIN items_facturas B ON A.NUMERO = B.NUMERO 
    WHERE A.FECHA_VENTA = fecha2;

    -- Calcular la variación porcentual
    IF total_venta_fecha1 = 0 THEN
        SET variacion_porcentual = 100; -- Si no hay ventas en fecha1, consideramos un cambio del 100%
    ELSE
        SET variacion_porcentual = ((total_venta_fecha2 - total_venta_fecha1) / total_venta_fecha1) * 100;
    END IF;

    -- Determinar el resultado basado en la variación porcentual
    IF variacion_porcentual > 10 THEN
        SET resultado = 'Verde';
    ELSEIF variacion_porcentual >= -10 AND variacion_porcentual <= 10 THEN
        SET resultado = 'Amarillo';
    ELSE
        SET resultado = 'Rojo';
    END IF;

    -- Devolver el resultado
    SELECT resultado AS Estado_Ventas, total_venta_fecha1 AS Total_Venta_Fecha1, total_venta_fecha2 AS Total_Venta_Fecha2;

END //

DELIMITER ;

El código que proporcionaste parece correcto, pero si estás teniendo problemas al ejecutarlo, asegúrate de utilizar el delimitador // antes y después de la creación del procedimiento almacenado, ya que el punto y coma (;) se utiliza dentro del procedimiento y podría causar conflictos.

Espero haber ayudado y buenos estudios!

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