Com relação ao que foi pedido fiz as seguintes queries:
CREATE VIEW `vw_relatório_de_compras_qtd` AS
SELECT NF.CPF, TC.NOME, DATE_FORMAT(NF.DATA_VENDA, '%m/%Y') AS `mes/ano`,
SUM(INF.QUANTIDADE) AS QTD_COMPRADA, MAX(TC.VOLUME_DE_COMPRA) AS QTD_LIMITE
FROM notas_fiscais AS NF
INNER JOIN itens_notas_fiscais AS INF ON NF.NUMERO = INF.NUMERO
INNER JOIN tabela_de_clientes AS TC ON NF.CPF = TC.CPF
GROUP BY NF.CPF, `mes/ano`
ORDER BY `mes/ano`, TC.NOME;
SELECT VW.CPF, VW.NOME, VW.`mes/ano`, VW.QTD_COMPRADA, VW.QTD_LIMITE,
ROUND((1 - (VW.QTD_LIMITE/VW.QTD_COMPRADA)) * 100, 2) AS PERCENTUAL
FROM (
SELECT * FROM `vw_relatório_de_compras_qtd`) AS VW
WHERE (VW.QTD_LIMITE - VW.QTD_COMPRADA) < 0;
Gostaria de saber o seguinte: O fato de criar uma view prejudica o cost da query? Seria a execução desta query com esse formato? Ressalto que não incluí o campo compra válida/inválida tendo em vista que não há necessidade neste relatória, uma vez que todas as compras seriam "inválidas".