Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Procedimiento almacenado llamado comparacion_ventas que compara las ventas en dos fechas distintas y retorna el resultado basado en la variación porcentual.

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.

2 respuestas

Hola Javier, espero que estés bien

Tu procedimiento almacenado comparacion_ventas parece estar bien estructurado y cumple con los requisitos del desafío. Aquí tienes algunos puntos a considerar que podrían ayudarte a verificar o mejorar tu código:

  1. Verificación de Ventas Nulas: Asegúrate de que venta1 y venta2 no sean nulas antes de calcular la variación porcentual. Si alguna de las fechas no tiene ventas, el cálculo de la variación podría dar un error. Podrías agregar una verificación para establecer venta1 o venta2 a 0 si son nulas.

    SET venta1 = IFNULL(venta1, 0);
    SET venta2 = IFNULL(venta2, 0);
    
  2. División por Cero: Si venta1 es 0, la división en el cálculo de variacion resultará en un error. Podrías manejar este caso específico para evitar problemas.

    IF venta1 = 0 THEN
        SET variacion = 0; -- O cualquier lógica que prefieras
    ELSE
        SET variacion = ((venta2 - venta1) / venta1) * 100;
    END IF;
    
  3. Formato de Salida: Asegúrate de que los nombres de las columnas en el SELECT final sean claros y reflejen lo que se está mostrando. Tu formato actual ya parece adecuado.

  4. Pruebas: Realiza pruebas con diferentes fechas para asegurarte de que el procedimiento funcione correctamente en todos los casos, especialmente cuando una de las fechas no tiene ventas.

Espero que estos consejos te sean útiles. ¡Espero haber ayudado y buenos estudios!

Me habia olvidado de la división por ceros!

Es vital ejecutar pruebas unitarias en todos los casos o escenarios posibles.

Si muy buenas observaciones, gracias!