Refactorizar consultas anidadas en CTE
Aplique un patrón de entrevista en directo: transforme una consulta anidada ilegible en CTE paso a paso
Refactorizar consultas anidadas en CTE es una lección gratuita de Coding Interview Prep en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Coding Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Coding Interview Prep incluye 4 lecciones en total.
La refactorización en una entrevista en directo
Una pregunta habitual para perfiles de nivel intermedio es: aquí tiene una consulta; hágala legible. El entrevistador le entrega un SELECT profundamente anidado y observa cómo lo descompone. Convertir el anidamiento en una secuencia de CTE con nombre es la respuesta más clara.
Esta lección recorre los pasos exactos para que pueda realizarlos con calma ante una pizarra.
Empiece por la consulta más interna
Conceptualmente, las subconsultas anidadas se ejecutan desde dentro hacia fuera. Por tanto, lea también la consulta desde dentro hacia fuera: localice primero el SELECT entre paréntesis más profundo; esa será la primera etapa del flujo.
Asígnele un nombre descriptivo y conviértalo en un CTE. Todo lo que hacía referencia a ese bloque interno pasará a hacer referencia al nombre del CTE.
SELECT *
FROM (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
) t
WHERE t.total > 1000;Convierta un nivel en un CTE
Tome esa tabla derivada más interna y conviértala en un CTE. La consulta externa permanece igual, salvo que ahora selecciona los datos del CTE con nombre.
Este sencillo paso ya elimina un nivel de anidamiento mental y proporciona a la etapa un nombre significativo.
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
)
SELECT *
FROM spend
WHERE total > 1000;Un ejemplo realmente anidado
A continuación tiene un caso más difícil de refactorizar: dos niveles de anidamiento y un filtro de estilo correlacionado. El objetivo es obtener el valor medio de los pedidos entre los clientes del nivel de mayor gasto.
La consulta es correcta, pero difícil de leer. La separaremos 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
);Nombre la primera etapa
El bloque más profundo calcula el gasto total por cliente. Conviértalo en un CTE llamado spend. Ahora, la capa intermedia simplemente filtra ese CTE.
Observe cómo cada extracción reduce en uno la profundidad del anidamiento y añade un nombre autodocumentado.
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
);Nombre la segunda etapa
Extraiga el filtro sobre spend a su propio CTE, big_spenders. La consulta principal restante se convierte en una unión plana o en una comprobación de pertenencia frente a un conjunto con un nombre claro.
Ahora cada etapa tiene una sola responsabilidad, una característica fundamental del SQL limpio.
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;Conserve la semántica al refactorizar
La regla de oro es que una refactorización no debe cambiar los resultados. Preste atención a las trampas que alteran silenciosamente la salida:
- Cambiar
INpor unJOINpuede introducir filas duplicadas si el lado derecho no es distinto. NOT INcon valores NULL se comporta de forma diferente aNOT EXISTS.- El nivel de granularidad de la agregación debe mantenerse.
Exponga estos riesgos en voz alta para demostrar que trabaja con rigor.
Verifique la refactorización
¿Cómo demuestra que la refactorización conserva el comportamiento original? Mencione que ejecutaría ambas versiones y compararía el número de filas y una suma de comprobación, o que compararía los conjuntos de resultados de una muestra.
En una entrevista, incluso decir Validaría comparando los recuentos y algunas filas puntuales demuestra una disciplina de ingeniería que va más allá de limitarse a reescribir la sintaxis.
SELECT COUNT(*), SUM(amount)
FROM orders
WHERE customer_id IN (SELECT customer_id FROM big_spenders);Cuándo NO refactorizar
Refactorizar no siempre supone una mejora. Puede ser más claro dejar intacta una subconsulta única y sencilla, y dividirla demasiado en muchos CTE pequeños también puede perjudicar la legibilidad.
Use su criterio: refactorice cuando el anidamiento oculte la intención o cuando se reutilice la lógica. Diga al entrevistador que se detendría cuando la consulta se lea de arriba abajo como una serie de pasos diferenciados y con nombre.
La lista de comprobación de la refactorización
Un método repetible que puede recitar:
- Lea de dentro hacia fuera para encontrar la subconsulta más profunda.
- Extráigala a un CTE con nombre.
- Repita el proceso hacia arriba, una capa cada vez.
- Asigne a cada etapa un nombre que indique qué produce.
- Confirme que los resultados no han cambiado (preste atención a las diferencias entre IN y JOIN, y a las trampas con NULL).
Así, una consulta anidada que parecía intimidante se convierte en una reescritura ordenada y gradual.
Cómo comunicar su refactorización
Explique lo que hace mientras trabaja: El bloque más interno calcula el gasto por cliente, así que lo llamaré spend. La siguiente capa filtra a los clientes que más gastan. Después, la consulta externa calcula el promedio de los importes de sus pedidos.
Los entrevistadores evalúan la comunicación tanto como la corrección. Una refactorización explicada paso a paso demuestra exactamente la madurez profesional intermedia que buscan.
Comprobación rápida
Identifique el primer paso correcto al refactorizar una consulta profundamente anidada para convertirla en CTE.
Recapitulación: refactorizar en CTE
Ha aprendido una refactorización ordenada y repetible: leer de dentro hacia fuera, extraer la subconsulta más profunda a un CTE con nombre y avanzar hacia fuera una capa cada vez.
- Asigne a cada etapa un nombre que indique qué produce.
- Preserve la semántica; preste atención a los duplicados causados por las diferencias entre IN y JOIN, y a las trampas con NULL.
- Valide comparando los recuentos y algunas filas de muestra.
- No divida demasiado; deténgase cuando la consulta se lea como una serie de pasos claros y con nombre.
Con esto termina el curso sobre CTE; ahora puede refactorizar con confianza en una entrevista real.
Preguntas frecuentes
¿La lección «Refactorizar consultas anidadas en CTE» es gratis?
Sí — el texto completo de «Refactorizar consultas anidadas en CTE» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Coding Interview Prep, actualiza a CoddyKit PRO. El curso de Coding Interview Prep incluye 4 lecciones en total.
¿Qué aprenderé en «Refactorizar consultas anidadas en CTE»?
Aplique un patrón de entrevista en directo: transforme una consulta anidada ilegible en CTE paso a paso Practicas Coding Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Coding Interview Prep?
No se requiere experiencia previa. Coding Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Refactorizar consultas anidadas en CTE»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Coding Interview Prep?
Sí. Cada lección de Coding Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Escribir su primer CTE
- Encadenar varios CTE
- CTE frente a subconsulta frente a tabla temporal
- Refactorizar consultas anidadas en CTE