1
resposta

[Dúvida] Resolução: Utilizando Subconsulta

Olá, bom dia. Realizei a subconsulta necessária para substituir o Having, como manda a questão. No começo tentei continuar utilizando os ALIAS que fiz no código anterior, onde tive que referenciar as tabelas após fazer o Inner Join. Quando resolvi ignorá-los, deu certo.

Posso então, abandonar os ALIAS anteriores e substituir pelo novo da Subconsulta (INF_QNTD) por que os anteriores estão encapsulados? Portanto o código já está guardando essa informação? Não ficou assim tão claro para mim.

SELECT INF_QNTD.CODIGO_DO_PRODUTO, INF_QNTD.NOME_DO_PRODUTO, INF_QNTD.SUM_QNTD
FROM
(
    SELECT INF.CODIGO_DO_PRODUTO, TP.NOME_DO_PRODUTO, SUM(INF.QUANTIDADE) AS SUM_QNTD
    FROM ITENS_NOTAS_FISCAIS INF
    INNER JOIN TABELA_DE_PRODUTOS TP 
    ON INF.CODIGO_DO_PRODUTO = TP.CODIGO_DO_PRODUTO
    GROUP BY INF.CODIGO_DO_PRODUTO, TP.NOME_DO_PRODUTO
    ORDER BY SUM(INF.QUANTIDADE) DESC
)INF_QNTD
WHERE INF_QNTD.SUM_QNTD > 394000;
1 resposta

Olá, Gabriel, tudo bem?

Quando encapsulamos uma consulta dentro de outra, os ALIAS definidos na subconsulta são utilizados apenas dentro desse contexto específico. Ou seja, os ALIAS anteriores ficam encapsulados e podemos usar novos ALIAS na consulta externa sem problemas.

No seu código, você fez exatamente isso ao definir a subconsulta com o ALIAS INF_QNTD. A subconsulta calcula a soma das quantidades (SUM_QNTD) para cada produto e depois a consulta externa filtra os resultados onde SUM_QNTD é maior que 394000.

Espero ter esclarecido e qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!