Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

RESPOSTA

Procedure:

CREATE DEFINER=`root`@`localhost` PROCEDURE `Comparativo_Vendas`(VDataVenda1 date, VDdataVenda2 date)
BEGIN

    DECLARE TotalNotas1 float;
    DECLARE TotalNotas2 float;
    DECLARE DiferencaTotalNotas float;
    DECLARE DiferencaPercentual float;
    DECLARE Mensagem varchar(20);
    
    SELECT SUM(B.QUANTIDADE * B.PRECO) into TotalNotas1 
    FROM NOTAS_FISCAIS A INNER JOIN ITENS_NOTAS_FISCAIS B
    ON A.NUMERO = B.NUMERO
    WHERE A.DATA_VENDA = VDatavenda1;
    
    SELECT SUM(B.QUANTIDADE * B.PRECO) into TotalNotas2 
    FROM NOTAS_FISCAIS A INNER JOIN ITENS_NOTAS_FISCAIS B
    ON A.NUMERO = B.NUMERO
    WHERE A.DATA_VENDA = VDdataVenda2;
    
    SET DiferencaTotalNotas = TotalNotas2  - TotalNotas1 ;
    SET DiferencaPercentual = ((100 * DiferencaTotalNotas))/TotalNotas2;
    
    if DiferencaPercentual > 10 then
        set mensagem = 'VERDE';
    elseif DiferencaPercentual >-10 then
        set mensagem = 'AMARELA';
    elseif DiferencaPercentual <-10 then
        set mensagem = 'VERMELHA';
    end if;
    
    select concat('R$ ',format(TotalNotas1,2,'de_DE')) as TotalNotasData1, concat('R$ ',format(TotalNotas2,2,'de_DE')) as TotalNota2, concat('R$ ',format(DiferencaTotalNotas,2,'de_DE')) as DiferencaTotaldasNotas, concat(format(DiferencaPercentual,5,2), ' %') as DiferencaPercentual, mensagem; -- coloca no formato moeda
    
END

Chamando a procedure:

call Comparativo_Vendas('2015-01-03','2015-01-04');
2 respostas
solução!

Oii, Daniella! Tudo bem?

Parabéns por praticar o desafio proposto é uma excelente forma para consolidar os conhecimentos.

Apenas gostaria de pontuar duas coisas que podem te ajudar a deixá-la mais eficiente. Na sua comparação de variáveis se encontra assim, está faltando o sinal de "=" e também precisamos mantê-la na linha da cor amarela.

  1. O seu está assim:
elseif DiferencaPercentual > -10 then
        set mensagem = 'AMARELA';
    elseif DiferencaPercentual < -10 then
        set mensagem = 'VERMELHA';

Refatorando, conseguimos deixar ele dessa forma:

elseif DiferencaPercentual >= -10 AND DiferencaPercentual <= 10 THEN
        select  'AMARELA';
        else
       select  'VERMELHA';
  1. Podemos também melhorar o seu código de diferença percentual deixando-a mais simples e calculável:
SET Variacao = ((FaturamentoFinal / FaturamentoInicial) -1) * 100;

É isso, continue se dedicando aos estudos e qualquer dúvida, não hesite em recorrer ao fórum.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Muito obrigado pelas dicas.