0Pricing
Coding Interview Prep · Aula

Refatorando consultas aninhadas em CTEs

Aprenda um padrão de entrevista ao vivo: transformar uma consulta aninhada ilegível em CTEs passo a passo.

Refatorando consultas aninhadas em CTEs é uma aula grátis de Coding Interview Prep no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.

A refatoração em uma entrevista ao vivo

Um enunciado clássico para nível intermediário: aqui está uma consulta; torne-a legível. O entrevistador entrega um SELECT profundamente aninhado e observa como você o divide. Transformar o aninhamento em uma sequência de CTEs nomeadas é a resposta mais organizada.

Esta lição percorre exatamente essas etapas para que você consiga executá-las com tranquilidade em um quadro branco.

Comece pela consulta mais interna

Subconsultas aninhadas são executadas conceitualmente de dentro para fora. Portanto, leia a consulta da mesma forma: encontre primeiro o SELECT mais interno entre parênteses; essa é a primeira etapa do seu fluxo.

Dê a ele um nome descritivo e transforme-o em uma CTE. Tudo que referenciava aquele bloco interno passa a referenciar o nome da CTE.

SELECT *
FROM (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
) t
WHERE t.total > 1000;

Promova um nível a uma CTE

Pegue essa tabela derivada mais interna e transforme-a em uma CTE. A consulta externa permanece igual, exceto pelo fato de agora selecionar a partir da CTE nomeada.

Essa única ação já remove um nível de aninhamento mental e dá à etapa um nome significativo.

WITH spend AS (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
)
SELECT *
FROM spend
WHERE total > 1000;

Um exemplo realmente aninhado

Veja um exemplo mais difícil de refatorar: dois níveis de aninhamento e um filtro semelhante a uma correlação. O objetivo é calcular o valor médio dos pedidos entre os clientes da faixa de maior gasto.

A consulta está correta, mas é difícil de ler. Vamos separá-la etapa por etapa.

SELECT AVG(o.amount) AS avg_order
FROM orders o
WHERE o.customer_id IN (
    SELECT customer_id
    FROM (
        SELECT customer_id, SUM(amount) AS total
        FROM orders
        GROUP BY customer_id
    ) s
    WHERE s.total > 1000
);

Dê um nome à primeira etapa

O bloco mais interno calcula o gasto total por cliente. Transforme-o em uma CTE chamada spend. Agora, a camada intermediária simplesmente filtra essa CTE.

Observe como cada extração reduz a profundidade do aninhamento em um nível e acrescenta um nome autoexplicativo.

WITH spend AS (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
)
SELECT AVG(o.amount) AS avg_order
FROM orders o
WHERE o.customer_id IN (
    SELECT customer_id FROM spend WHERE total > 1000
);

Dê um nome à segunda etapa

Extraia o filtro sobre spend para sua própria CTE, big_spenders. A consulta principal restante se torna uma junção simples ou um teste de pertencimento em relação a um conjunto claramente nomeado.

Agora cada etapa tem uma única responsabilidade, característica fundamental de um SQL organizado.

WITH spend AS (
    SELECT customer_id, SUM(amount) AS total
    FROM orders GROUP BY customer_id
),
big_spenders AS (
    SELECT customer_id FROM spend WHERE total > 1000
)
SELECT AVG(o.amount) AS avg_order
FROM orders o
JOIN big_spenders b ON b.customer_id = o.customer_id;

Preserve a semântica durante a refatoração

A regra de ouro: uma refatoração não deve alterar os resultados. Fique atento às armadilhas que modificam a saída silenciosamente:

  • Trocar IN por JOIN pode introduzir linhas duplicadas se o lado direito não for distinto.
  • NOT IN com valores nulos se comporta de forma diferente de NOT EXISTS.
  • A granularidade da agregação deve permanecer a mesma.

Diga esses riscos em voz alta para demonstrar cuidado.

Verifique a refatoração

Como provar que a refatoração é fiel? Mencione que você executaria as duas versões e compararia a quantidade de linhas e uma soma de verificação, ou compararia os conjuntos de resultados em uma amostra.

Em uma entrevista, até mesmo dizer Eu validaria comparando as quantidades e algumas linhas escolhidas demonstra uma disciplina de engenharia que vai além de simplesmente reescrever a sintaxe.

SELECT COUNT(*), SUM(amount)
FROM orders
WHERE customer_id IN (SELECT customer_id FROM big_spenders);

Quando NOT refatorar

A refatoração nem sempre é uma melhoria. Talvez seja mais claro deixar uma única subconsulta simples como está, e dividi-la em muitas CTEs pequenas também pode prejudicar a legibilidade.

Use seu discernimento: refatore quando o aninhamento ocultar a intenção ou quando a lógica for reutilizada. Diga ao entrevistador que você pararia quando a consulta pudesse ser lida de cima para baixo como etapas distintas e nomeadas.

A lista de verificação da refatoração

Um método que você pode recitar:

  • Leia de dentro para fora para encontrar a subconsulta mais profunda.
  • Transforme-a em uma CTE nomeada.
  • Repita o processo para cima, uma camada por vez.
  • Dê a cada etapa um nome que indique o que ela produz.
  • Confirme que os resultados não mudaram (observe as armadilhas de IN/JOIN e NULL).

Isso transforma uma consulta aninhada assustadora em uma reescrita tranquila e passo a passo.

Comunicando sua refatoração

Fale enquanto trabalha: O bloco mais interno representa os gastos por cliente, então vou chamá-lo de gastos. A camada seguinte filtra os clientes que gastam muito. Depois, a consulta externa calcula a média dos valores dos pedidos deles.

Os entrevistadores avaliam a comunicação tanto quanto a correção. Uma refatoração narrada, etapa por etapa, mostra exatamente a maturidade intermediária que eles procuram.

Verificação rápida

Identifique o primeiro passo correto ao refatorar uma consulta profundamente aninhada em CTEs.

Recapitulação: refatoração em CTEs

Você aprendeu uma refatoração tranquila e repetível: ler de dentro para fora, transformar a subconsulta mais profunda em uma CTE nomeada e avançar para fora uma camada por vez.

  • Dê a cada etapa um nome que indique o que ela produz.
  • Preserve a semântica; observe as duplicatas de IN versus JOIN e as armadilhas de NULL.
  • Valide comparando as quantidades e algumas linhas de amostra.
  • Não divida demais; pare quando a consulta puder ser lida como etapas claras e nomeadas.

Isso conclui o curso de CTEs; agora você pode refatorar com confiança durante uma entrevista.

Perguntas Frequentes

A aula “Refatorando consultas aninhadas em CTEs” é grátis?

Sim — o texto completo de “Refatorando consultas aninhadas em CTEs” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.

O que vou aprender em “Refatorando consultas aninhadas em CTEs”?

Aprenda um padrão de entrevista ao vivo: transformar uma consulta aninhada ilegível em CTEs passo a passo. Você pratica Coding Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Coding Interview Prep?

Nenhuma experiência prévia é necessária. Coding Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Refatorando consultas aninhadas em CTEs”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Coding Interview Prep?

Sim. Cada aula de Coding Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Escrevendo sua primeira CTE
  2. Encadeando várias CTEs
  3. CTE versus subconsulta versus tabela temporária
  4. Refatorando consultas aninhadas em CTEs
← Voltar para Coding Interview Prep