kassia.andrade Postado Junho 27, 2022 Compartilhar Postado Junho 27, 2022 Olá pessoal , tudo bem? Vou falar um pouco sobre CTEs e seus benefícios para as boas práticas de documentação. Oque é uma CTE? CTE é uma expressão de tabela comum, derivada de uma consulta simples. Sintaxe:[ WITH <common_table_expression> [ ,...n ] ] <common_table_expression>::= expression_name [ ( column_name [ ,...n ] ) ] AS ( CTE_query_definition ) Porque usar CTE? Visando as boas práticas para manutenção do código SQL, as CTEs são mais fáceis de ler por terem uma lógica de começo e fim melhor definida, desde que estejam devidamente indentadas. Facilitam o entendimento e debugação da query SQL. Como usar as CTEs? O ideal é sempre que usar uma CTE , a proxima corresponda a última CTE criada, desse jeito será bem fácil de identificar as informações ao debugar a query. Use sempre nomes que façam sentido para as CTEs , evite usar s1, tb2 ..etc.., lembre-se quem esta lendo seu código precisa entende-lo! Se houver mais de uma CTE , a anterior deverá ser seguida de virgula antes de começar a próxima. Exemplo de uso da CTE: WITH vendas_cte AS -- Definição da primeira CTE( SELECT id_vendedor SUM(valor_total) AS valor_total_vendas, YEAR(adata) AS ano_vendas FROM vendas.vendas_pedidos WHERE id_vendedor IS NOT NULL GROUP BY id_vendedor, YEAR(data) ) , /*Use a virgula para separar uma CTE da outra Define a segunda query, onde não usamos mais o WITH , o WITH é utilizado apenas no começo. A partir da segunda CTE utilizamos apenas o nome da CTE seguida de 'as'. Essa CTE retorna dados de venda por ano e por pessoa */ vendas_quota_cte AS ( SELECT id_empresa, SUM(quota_vendas) AS quota_vendas, YEAR(data) AS quota_vendas_ano FROM vendas.historico_quota_vendedor GROUP BY id_empresa, YEAR(data) ) --definição de query normal que utiliza as duas CTEs anteriores como tabelaSELECT id_vendedor , ano_vendas , FORMAT(valor_total_vendas,'C','en-us') AS total_vendas , quota_vendas_ano , FORMAT (quota_vendas, 'C' ,'en-us') AS quota_vendas , FORMAT (valor_total_vendas -quota_vendas, 'C','en-us') AS acima_abaixo_quotaFROM vendas_cte JOIN vendas_quota_cte ON vendas_quota_cte.id_empresa = vendas_cte.id_vendedor AND vendas_cte.ano_vendas = vendas_quota_cte.quota_vendas_ano ORDER BY id_vendedor, ano_vendas; Comaparação de CTE e subquery: Exemplo de CTE: with detalhes as ( select id_usuario, nome, row_number() over (partition by id_usuario order by data_atualizacao desc) as rank_detalhe from billingdaddy.billing_stored_details ), atualizacoes as ( select id_usuario, nome from detalhes -- a segunda CTE chama a primeira CTE e assim por de ante where rank_detalhe = 1 ) select * from atualizacoes Exemplo de subquery: Nesse exemplo existe apenas uma subquery, imagine várias subqueries como seria confuso de debugar. select id_usuario, nomefrom ( select id_usuario, nome, row_number() over (partition by id_usuario order by data_atualizacao desc) as rank_detalhe from billingdaddy.billing_stored_details) atualizacoes where rank_detalhe = 1 Limitações da CTE: Não suporta INSERT, UPDATE, DELETE e MERGE, apenas instrução SELECT. Não é possível utilizar cláusula ORDER BY , exceto quando uma cláusula TOP é especificada. Concluindo ..não é só no mundo do desenvolvimento que é necessário criar códigos legíveis e de fácil manutenção, no universo da analise de dados ,principalmente em scripts SQL também existe essa necessidade. Crie sempre sua query pensando no legado ,independentemente da linguagem utilizada, lembre-se que sempre terá alguém que precisará ler e entender seu código. 2 Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
Postagens Recomendadas
Crie uma conta ou entre para comentar 😀
Você precisa ser um membro para deixar um comentário.
Crie a sua conta
Participe da nossa comunidade, crie sua conta.
Criar minha conta agoraÉ bem rápido!
Entrar
Você já tem uma conta?
Entrar agoraFaça o login agora.