DELIMITER //
CREATE PROCEDURE comparacion_ventas(IN fecha1 DATE, IN fecha2 DATE) BEGIN DECLARE venta1 DECIMAL(10, 2); DECLARE venta2 DECIMAL(10, 2); DECLARE variacion DECIMAL(5, 2); DECLARE resultado VARCHAR(10);
-- Obtener el total de ventas para la primera fecha
SELECT SUM(B.CANTIDAD * B.PRECIO) INTO venta1
FROM facturas A
INNER JOIN items_facturas B ON A.NUMERO = B.NUMERO
WHERE A.FECHA_VENTA = fecha1;
-- Obtener el total de ventas para la segunda fecha
SELECT SUM(B.CANTIDAD * B.PRECIO) INTO venta2
FROM facturas A
INNER JOIN items_facturas B ON A.NUMERO = B.NUMERO
WHERE A.FECHA_VENTA = fecha2;
-- Calcular la variación porcentual
SET variacion = ((venta2 - venta1) / venta1) * 100;
-- Determinar el resultado basado en la variación porcentual
IF variacion > 10 THEN
SET resultado = 'Verde';
ELSEIF variacion >= -10 AND variacion <= 10 THEN
SET resultado = 'Amarillo';
ELSE
SET resultado = 'Rojo';
END IF;
-- Mostrar el resultado
SELECT venta1 AS 'Venta Fecha 1', venta2 AS 'Venta Fecha 2', variacion AS 'Variación %', resultado AS 'Evaluación';
END;
//
DELIMITER ;
Explicación: DELIMITER //: Cambia el delimitador de comandos de ; a // para permitir definir el bloque del procedimiento almacenado.
CREATE PROCEDURE comparacion_ventas(IN fecha1 DATE, IN fecha2 DATE): Crea un procedimiento almacenado llamado comparacion_ventas que toma dos parámetros de entrada fecha1 y fecha2 de tipo DATE.
DECLARE: Declara las variables venta1, venta2 (para almacenar las ventas de las dos fechas), variacion (para almacenar la variación porcentual) y resultado (para almacenar el resultado de la evaluación).
SELECT SUM(B.CANTIDAD * B.PRECIO) INTO venta1 ... WHERE A.FECHA_VENTA = fecha1: Obtiene el total de ventas para la primera fecha y lo almacena en venta1.
SELECT SUM(B.CANTIDAD * B.PRECIO) INTO venta2 ... WHERE A.FECHA_VENTA = fecha2: Obtiene el total de ventas para la segunda fecha y lo almacena en venta2.
SET variacion = ((venta2 - venta1) / venta1) * 100: Calcula la variación porcentual entre las dos ventas.
IF variacion > 10 THEN ... ELSEIF variacion >= -10 AND variacion <= 10 THEN ... ELSE ... END IF: Determina el resultado basado en la variación porcentual. Si la variación es mayor al 10%, el resultado será 'Verde'. Si está entre -10% y 10%, será 'Amarillo'. Si es menor al -10%, será 'Rojo'.
SELECT venta1 AS 'Venta Fecha 1', venta2 AS 'Venta Fecha 2', variacion AS 'Variación %', resultado AS 'Evaluación': Muestra las ventas de ambas fechas, la variación porcentual y el resultado de la evaluación.