Nesta aula construímos um relatório que apresentou os clientes que tiveram vendas inválidas. Complemente este relatório listando somente os que tiveram vendas inválidas e calculando a diferença entre o limite de venda máximo e o realizado, em percentuais.
Solução:
SELECT *, CONCAT(ROUND((1 - (X.VOLUME_DE_COMPRA / X.QUANTIDADE_VENDAS)) * 100, 2), '%') AS DIFERENCA
FROM (SELECT NF.CPF, SUM(INF.QUANTIDADE) AS QUANTIDADE_VENDAS,
DATE_FORMAT(NF.DATA_VENDA, '%Y-%m') AS MES_ANO, TC.VOLUME_DE_COMPRA, TC.NOME,
CASE
WHEN (TC.VOLUME_DE_COMPRA - SUM(INF.QUANTIDADE)) < 0 THEN 'INVÁLIDO'
ELSE 'VÁLIDO'
END AS STATUS_VENDA
FROM ITENS_NOTAS_FISCAIS INF
INNER JOIN NOTAS_FISCAIS NF
ON INF.NUMERO = NF.NUMERO
INNER JOIN TABELA_DE_CLIENTES TC
ON TC.CPF = NF.CPF
GROUP BY NF.CPF, DATE_FORMAT(NF.DATA_VENDA, '%Y-%m')) X
WHERE X.STATUS_VENDA = 'INVÁLIDO';
Output (resumido):
CPF | QUANTIDADE_VENDAS | MES_ANO | VOLUME_DE_COMPRA | NOME | STATUS_VENDA | DIFERENCA |
---|---|---|---|---|---|---|
1471156710 | 26385 | 2015-05 | 24500 | Érica Carvalho | INVÁLIDO | 7.14% |
1471156710 | 24926 | 2015-08 | 24500 | Érica Carvalho | INVÁLIDO | 1.71% |
A minha solução buscou usar o máximo possível de comandos aprendidos nesse curso.