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'