1
resposta

Minha resolução

SELECT 
TC.CPF,
TC.NOME,
TC.VOLUME_DE_COMPRA,
ROUND((CASE WHEN TC.VOLUME_DE_COMPRA < TV.QUANTIDADE_TOTAL THEN (1 -(TC.VOLUME_DE_COMPRA/TV.QUANTIDADE_TOTAL)) * 100 
ELSE 0 END),2) AS PORCENTAGEM,
TV.QUANTIDADE_TOTAL,
TV.MES_ANO,
(CASE WHEN TC.VOLUME_DE_COMPRA >= TV.QUANTIDADE_TOTAL THEN 'Venda Válida' 
ELSE 'Venda acima do valor correto' END) AS RESULTADO
FROM
TABELA_DE_CLIENTES TC
INNER JOIN
(SELECT NF.CPF,
TO_CHAR(NF.DATA_VENDA, 'MM-YYYY') AS MES_ANO,
SUM(ITEM.QUANTIDADE) AS QUANTIDADE_TOTAL
FROM 
NOTAS_FISCAIS NF 
INNER JOIN 
ITENS_NOTAS_FISCAIS ITEM
ON 
NF.NUMERO = ITEM.NUMERO
GROUP BY NF.CPF, TO_CHAR(NF.DATA_VENDA, 'MM-YYYY')) TV
ON 
TC.CPF = TV.CPF
WHERE TV.MES_ANO = '02-2015' AND TC.VOLUME_DE_COMPRA - TV.QUANTIDADE_TOTAL < 0
ORDER BY TC.NOME;

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oii Adriano, tudo bem?

Obrigada por compartilhar sua resolução no fórum.

Sua query está bem estruturada: a subquery para calcular o QUANTIDADE_TOTAL por CPF e mês está correta, o INNER JOIN com a TABELA_DE_CLIENTES faz sentido, e o filtro TC.VOLUME_DE_COMPRA - TV.QUANTIDADE_TOTAL < 0 garante que apenas as vendas inválidas apareçam — exatamente o que a atividade pede.

Uma observação sobre o CASE que gera a coluna RESULTADO: como o WHERE já filtra somente os registros com venda acima do limite, a condição ELSE 'Venda Válida' nunca será atingida nesse resultado. Não é um erro — o código funciona corretamente — mas se quiser deixar a query mais enxuta, poderia remover o CASE e colocar o valor fixo 'Venda acima do valor correto' diretamente, já que todos os registros retornados são desse tipo.

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade