1
resposta

Vacilei na fórmula

Errei na formula de porcentagem. Me pareceu uma boa formula a princípio.

CREATE DEFINER=`root`@`localhost` PROCEDURE `Comparativo_Vendas`(Variavel01 date, Variavel02 date)
BEGIN
    declare vMensagem varchar(30);
    declare vTOTAL_VENDA01 int;
    declare vTOTAL_VENDA02 int;
    declare vResultado Decimal;

        SELECT SUM(B.QUANTIDADE * B.PRECO) into vTOTAL_VENDA01 FROM 
    NOTAS_FISCAIS A INNER JOIN ITENS_NOTAS_FISCAIS B
    ON A.NUMERO = B.NUMERO
    WHERE A.DATA_VENDA = Variavel01;

       SELECT SUM(B.QUANTIDADE * B.PRECO) into vTOTAL_VENDA02 FROM 
    NOTAS_FISCAIS A INNER JOIN ITENS_NOTAS_FISCAIS B
    ON A.NUMERO = B.NUMERO
    WHERE A.DATA_VENDA = Variavel02;

        select round(((Cast(vTOTAL_VENDA01 AS DECIMAL)*100)/(Cast(vTOTAL_VENDA02 AS DECIMAL))),2) INTO vResultado;

    If vResultado > 10 then
        set vMensagem = 'VERDE';
    Elseif vResultado > -10 and vResultado < 10 then
        set vMensagem = 'Amarela';
    else
        set vMensagem = 'Vermelho';
    end if;

    select vMensagem, concat('A porcentagem é de: ',vResultado,'%') as Percentual;
END

Mas fica aqui o aprendizado. Não sabia que o comando set poderia aparecer sozinho. Ta aí uma novidade pra mim rs

1 resposta

Olá, Alysson, tudo bem?

Peço desculpas pela demora no retorno.

Uma das formas de se calcular a variação percentual, é:

 Variação Percentual = (VF/VI - 1) × 100

Onde VF = Valor Final e VI = Valor Inicial.

Sobre a sua fórmula:

  • Você pode declarar as duas variáveis vTOTAL_VENDA01 e vTOTAL_VENDA 02 como FLOAT, assim, você não precisa utilizar o CAST para realizar a conversão de INT para DECIMALno momento de calcular a porcentagem.

  • Após a divisão, você subtrai -1para obter a variação entre os dois valores.

  • A multiplicação por 100 deve ser feita após a divisão do valor final pelo inicial, assim, será retornado o resultado final em porcentagem.

set vResultado = ((vTOTAL_VENDA02 /vTOTAL_VENDA01 ) - 1) *100;

Outra forma de obter a variação percentual, é como mostro abaixo:

set vResultado = ((vTOTAL_VENDA02 - vTOTAL_VENDA01)/vTOTAL_VENDA01) *100;

Tanto o SET como o SELECT são utilizados para atribuir valores a variáveis, algumas diferenças entre as duas funções são:

SET

  1. Atribui um valor a uma variável
  2. Se a instrução SET não retornar nenhuma linha, o valor da variável ficará como NULL

SELECT

  1. Atribui um valor ou vários valores a uma variável
  2. Se a instrução SELECT não retornar nenhuma linha, a variável não sofrerá alteração no seu valor atual
  3. Atribui valores a uma variável, a partir de uma consulta em uma tabela.

A título de curiosidade, caso queira ver um pouco mais sobre SET , indico a leitura da documentação do MySQL

OBS: Infelizmente a documentação do MySQL é em inglês, então, caso tenha dificuldade em relação a este idioma, indico que tente utilizar o tradutor do navegador, para conseguir efetuar a leitura em português, mas qualquer dúvida ou dificuldade estarei à disposição.

Foi muito legal você ter compartilhado a sua resposta da atividade aqui com a gente, você está indo muito bem :)

Continue assim e bons estudos!