Fazendo a consulta utilizando views, fica próximo disso:
select sum(x.excedidos) as 'pacotes totas invalidos', x.datac as 'mes', count(x.doc) as 'clientes que excederam o limite' from
(select c.cpf as doc, c.nome, c.volume_de_compra as limite_de_compra, d.quantidade as quantidade_comprada, d.data as datac, case
when c.volume_de_compra < d.quantidade then 'passou do limite'
else 'dentro do limite'
end as validação, c.volume_de_compra - d.quantidade as 'excedidos'
from clientes c
inner join quanti d on c.cpf = d.cpf
where case
when c.volume_de_compra < d.quantidade then 'passou do limite'
else 'dentro do limite' end = 'passou do limite'
group by c.cpf, d.data
order by c.volume_de_compra - d.quantidade) x
where x.validação = 'passou do limite'
group by x.datac;