1
resposta

DESAFIO RELATÓRIO - 2 SCRIPTS

Comentários dos scripts: Para ficar mais organizado fiz toda a query como um subconsulta ordenando pelos campos de nome, mês e ano, após isso puxei apenas as colunas que me interessavam e adicionei um contact para juntar o nome do mês com o ano. PRIMEIRO SCRIPT - CALCULEI O PERCENTUAL ACIMA DO COMPRADO

SELECT 
    CPF,
    NOME,
    CONCAT(MÊS, '-', ANO) AS 'MÊS-ANO',
    QUANTIDADE,
    LIMITE,
    CONCAT(ROUND((((quantidade / LIMITE) - 1) * 100), 1),
            '%') AS 'PERCENTUAL ACIMA DO LIMITE',
    STATUS
FROM
    (SELECT 
        A.CPF,
            NOME,
            MONTH(DATA_VENDA),
            DATE_FORMAT(DATA_VENDA, '%M') AS 'MÊS',
            YEAR(DATA_VENDA) AS 'ANO',
            SUM(QUANTIDADE) AS QUANTIDADE,
            VOLUME_DE_COMPRA AS LIMITE,
            CASE
                WHEN SUM(QUANTIDADE) < VOLUME_DE_COMPRA THEN 'VÁLIDA'
                ELSE 'INVALIDA'
            END AS STATUS
    FROM
        notas_fiscais A
    INNER JOIN itens_notas_fiscais B ON A.NUMERO = B.NUMERO
    INNER JOIN tabela_de_clientes C ON A.CPF = C.CPF
    GROUP BY CPF , NOME , YEAR(DATA_VENDA) , MONTH(DATA_VENDA) , DATE_FORMAT(DATA_VENDA, '%M')
    ORDER BY NOME , YEAR(DATA_VENDA) , MONTH(DATA_VENDA) , DATE_FORMAT(DATA_VENDA, '%M')) AS DADOS
WHERE
    STATUS = 'Invalida';

SEGUNDO SCRIPT CALCULEI A DIFERENÇA PERCENTUAL ENTRE O LIMITE E O COMPRADO

SELECT 
    CPF,
    NOME,
    CONCAT(MÊS, '-', ANO) AS 'MÊS-ANO',
    QUANTIDADE,
    LIMITE,
    CONCAT(ROUND(((1 - (LIMITE / quantidade)) * 100), 1),
            '%') AS 'DIFERENÇA % LIMTE/QUANTIDADE ',
    STATUS
FROM
    (SELECT 
        A.CPF,
            NOME,
            MONTH(DATA_VENDA),
            DATE_FORMAT(DATA_VENDA, '%M') AS 'MÊS',
            YEAR(DATA_VENDA) AS 'ANO',
            SUM(QUANTIDADE) AS QUANTIDADE,
            VOLUME_DE_COMPRA AS LIMITE,
            CASE
                WHEN SUM(QUANTIDADE) < VOLUME_DE_COMPRA THEN 'VÁLIDA'
                ELSE 'INVALIDA'
            END AS STATUS
    FROM
        notas_fiscais A
    INNER JOIN itens_notas_fiscais B ON A.NUMERO = B.NUMERO
    INNER JOIN tabela_de_clientes C ON A.CPF = C.CPF
    GROUP BY CPF , NOME , YEAR(DATA_VENDA) , MONTH(DATA_VENDA) , DATE_FORMAT(DATA_VENDA, '%M')
    ORDER BY NOME , YEAR(DATA_VENDA) , MONTH(DATA_VENDA) , DATE_FORMAT(DATA_VENDA, '%M')) AS DADOS
WHERE
    STATUS = 'Invalida'
1 resposta

Oi, Vinicius! Tudo certo por aí?

Peço desculpas pela demora em retornar.

Nossa, suas consultas ficaram fantásticas! Parabéns pelo capricho ao organizar os SELECTS, isso é algo muito valoroso e que auxilia de forma significativa no entendimento dos códigos SQL e da interpretação das informações presentes na busca.

Continue sempre se dedicando, Vini! Se surgir alguma dúvida, fico à disposição para ajudar.

Um forte abraço.