COMO FAZER CTE NO FIREBIRD?
- #SQL
CTE é uma forma de criar uma “tabela virtual” temporária que pode ser referenciada e utilizada como se fosse uma tabela real nas partes subsequentes da consulta. Pode ser recursiva se fizer referência a si mesma em sua definição, o que é útil para realizar operações que envolvem estrutura de dados hierárquicas, como árvores ou gráficos.
Com as CTEs temos as vantagens de melhorar a legibilidade e facilidade de manutenção de consultas complexas. A consulta pode ser dividida em blocos lógicos simples e separados. Estes blocos simples podem então ser utilizados para construir blocos mais complexos até que a consulta final seja montada.
Imagine que você está lidando com uma base de dados de vendas de uma loja, e você quer calcular a receita total de vendas de produtos em diferentes categorias. Você também deseja saber a média de preços de produtos em cada categoria.
Sem o uso de CTE, sua consulta poderia ficar assim:
SELECT
categoria,
SUM(price) AS receita_total,
AVG(price) AS preco_medio
FROM
produtos
GROUP BY
categoria;
Com o uso da CTE:
WITH CategoryStats AS (
SELECT
category,
SUM(price) AS receita_total,
AVG(price) AS preco_medio
FROM
produtos
GROUP BY
categoria
)
SELECT
categoria,
receita_total,
preco_medio
FROM
CategoryStats;
Aqui, CategoryStats é a CTE. Primeiro, definimos a CTE para calcular as estatísticas (receita total e preço médio) para cada categoria de produtos. Em seguida, na consulta principal, simplesmente selecionamos os resultados da CTE. Essa abordagem divide a lógica em partes mais gerenciáveis e facilita a compreensão da consulta geral.
Visualmente, a diferença entre as duas abordagens é como a seguir:
/* Sem CTE */
Consulta
|
v
Seleção
/ | \
Grupo Soma
-------------
/* Com CTE */
Consulta
|
v
CTE
|
v
Seleção
A abordagem com CTE cria uma estrutura mais organizada, onde a lógica da CTE é definida separadamente e depois usada na consulta principal, resultando em um código mais legível e fácil de manter.
CTE Recursiva: https://ury1.com/9gyoT
CTE Encontrar Vendas: https://l1nq.com/sCuT4
CTE Calcular Informação: https://l1nq.com/gfEAa