1
resposta

Resolução Exercício - A consulta do relatório

SELECT
    t1.ano
,	t1.mes
,	t1.cpf
,	t1.nome
,	t1.volume_vendas
,	t1.volume_compra
,	t1.validador_venda
,	(1 - (t1.volume_compra/t1.volume_vendas)) * 100 AS percentual_excedido
FROM (
    SELECT
        YEAR(n.DATA_VENDA) AS ano
    ,	MONTH(n.DATA_VENDA) AS mes
    ,	c.CPF AS cpf
    ,	c.NOME AS nome
    ,	SUM(i.QUANTIDADE) AS volume_vendas
    ,	c.VOLUME_DE_COMPRA AS volume_compra
    ,	CASE
            WHEN SUM(i.QUANTIDADE) < c.VOLUME_DE_COMPRA THEN 1
            ELSE 0
        END AS validador_venda
    FROM tabela_de_clientes AS c
    INNER JOIN notas_fiscais AS n ON c.CPF = n.CPF
    LEFT JOIN itens_notas_fiscais AS i ON n.NUMERO = i.NUMERO
    WHERE 1=1
    GROUP BY
        YEAR(n.DATA_VENDA)
    ,	MONTH(n.DATA_VENDA)
    ,	c.CPF
    ,	c.NOME
    ORDER BY
        YEAR(n.DATA_VENDA)
    ,	MONTH(n.DATA_VENDA)
    ,	c.NOME
) AS t1
WHERE 1=1
AND NOT validador_venda
;

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

1 resposta

Oi, Carlos! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Na sua solução da consulta do relatório, você estruturou bem o uso de subquery com FROM (...) AS t1, separando claramente o cálculo dos agregados (SUM(i.QUANTIDADE)) da filtragem final com AND NOT validador_venda. Isso mostra um bom entendimento de organização de consultas SQL.
Outro ponto importante é o uso do CASE para criar o campo validador_venda, que permite filtrar depois de forma simples e legível. Além disso, o cálculo de percentual_excedido está correto e demonstra domínio de operações entre colunas agregadas.

Uma dica interessante para o futuro explorar o uso de HAVING, que permite filtrar diretamente resultados agregados. Veja este exemplo:


SELECT 
    c.cpf,
    c.nome,
    SUM(i.quantidade) AS volume_vendas
FROM tabela_de_clientes c
INNER JOIN notas_fiscais n ON c.cpf = n.cpf
LEFT JOIN itens_notas_fiscais i ON n.numero = i.numero
GROUP BY c.cpf, c.nome
HAVING SUM(i.quantidade) >= c.volume_de_compra;

Nesse caso, o HAVING filtra diretamente os clientes que atingiram o volume.

Agora me conta: o que você está achando desse conteúdo de consultas SQL mais avançadas até aqui? Teve alguma parte que achou mais desafiadora?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!