** 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 IFNULL(SUM(B.CANTIDAD * B.PRECIO), 0) 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 IFNULL(SUM(B.CANTIDAD * B.PRECIO), 0) INTO venta2
FROM facturas A
INNER JOIN items_facturas B ON A.NUMERO = B.NUMERO
WHERE A.FECHA_VENTA = fecha2;
-- Manejo de División por Cero y Calcular la variación porcentual
IF venta1 = 0 THEN
SET variacion = 0;
ELSE
SET variacion = ((venta2 - venta1) / venta1) * 100;
END IF;
-- Determinar el resultado basado en la variación porcentual usando CASE
SET resultado = CASE
WHEN variacion > 10 THEN 'Verde'
WHEN variacion >= -10 AND variacion <= 10 THEN 'Amarillo'
ELSE 'Rojo'
END;
-- Mostrar el resultado
SELECT venta1 AS 'Venta Fecha 1', venta2 AS 'Venta Fecha 2', variacion AS 'Variación Porcentual', resultado AS 'Evaluación';
END;
//
DELIMITER ; **
Explicación:
Verificación de Ventas Nulas: Se usa IFNULL(SUM(B.CANTIDAD * B.PRECIO), 0) para asegurarse de que venta1 y venta2 no sean nulas, estableciéndolas a 0 si no hay ventas.
Manejo de División por Cero: Se verifica si venta1 es 0 antes de calcular la variación porcentual. Si venta1 es 0, la variación se establece en 0.
Formato de Salida: Los nombres de las columnas en el SELECT final se han actualizado para ser más claros.