0Pricing
Coding Interview Prep · Lección

Comparar filas dentro de una tabla

Use patrones de self-join para encontrar pares, duplicados y registros adyacentes

Comparar filas dentro de una tabla es una lección gratuita de Coding Interview Prep en CoddyKit. Esta es la lección 3 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.

Self joins para comparar filas entre sí

Además de las jerarquías, el otro uso principal de un self join es comparar entre sí filas de una misma tabla. En lugar de establecer una relación padre-hijo, se emparejan filas arbitrarias para encontrar duplicados, coincidencias aproximadas o registros adyacentes.

El patrón es el mismo: asigne dos alias a la tabla y escriba una condición ON que exprese la relación entre las dos filas que desea emparejar.

Encontrar pares del mismo grupo

Pregunta clásica: encuentre todos los pares de empleados que trabajan en el mismo departamento. Combine la tabla consigo misma mediante la igualdad del departamento, pero mantenga distintas las dos filas.

La combinación ingenua también emparejaría a cada empleado consigo mismo y produciría cada par dos veces. Lo solucionaremos a continuación.

SELECT a.name, b.name, a.department
FROM employees a
JOIN employees b ON a.department = b.department;

Eliminar los pares consigo mismos y los duplicados reflejados

Al emparejar elementos del mismo grupo aparecen dos problemas: una fila coincide consigo misma (Alice con Alice) y cada par aparece dos veces (Alice-Bob y Bob-Alice).

Solucione ambos con una sola desigualdad: a.id < b.id. Esto garantiza que las dos filas sean diferentes y conserva solo uno de los dos órdenes posibles para cada par.

SELECT a.name, b.name, a.department
FROM employees a
JOIN employees b
  ON a.department = b.department
 AND a.id < b.id;

Por qué a.id < b.id y no a.id <> b.id

Usar a.id <> b.id elimina los pares de una fila consigo misma, pero sigue devolviendo los dos órdenes y duplica los resultados. Usar a.id < b.id elimina esos pares y deduplica el reflejo en un solo paso.

Los entrevistadores se fijan especialmente en la elección entre < y <>; demuestra que comprende la combinatoria de los self joins.

-- <>  keeps Alice-Bob AND Bob-Alice (duplicated)
-- <   keeps only Alice-Bob (correct unique pairs)

Encontrar filas duplicadas

Para encontrar registros que se duplican en columnas clave, haga un self join usando esas columnas y exija que las claves principales sean distintas.

Aquí mostramos los clientes que comparten una dirección de correo electrónico. La condición a.id < b.id conserva cada par duplicado una sola vez. A menudo, un GROUP BY ... HAVING COUNT(*) > 1 resulta más claro, pero el self join muestra los pares problemáticos reales uno al lado del otro.

SELECT a.id, b.id, a.email
FROM customers a
JOIN customers b
  ON a.email = b.email
 AND a.id < b.id;

Comparar registros adyacentes

Una tarea frecuente de análisis: comparar cada fila con la siguiente de la secuencia; por ejemplo, comparar las ventas de cada día con las del día anterior. Un self join puede emparejar filas consecutivas.

Aquí combinamos cada día con la fila exactamente un día anterior para calcular un delta. Esto funciona cuando la secuencia no tiene huecos.

SELECT t.day, t.amount,
       t.amount - y.amount AS change_vs_prev
FROM daily_sales t
JOIN daily_sales y
  ON y.day = t.day - INTERVAL '1 day';

El problema de los huecos en los self joins adyacentes

La consulta anterior falla si falta un día: no existe ninguna fila exactamente un día antes, por lo que esa fila desaparece mediante el inner join o debe gestionar los valores NULL.

Por eso los entrevistadores suelen orientarle hacia funciones de ventana como LAG para 'comparar con la fila anterior'. Estas utilizan la posición ordinal en lugar de comparar valores y gestionan los huecos correctamente.

-- LAG handles gaps; the self join assumed contiguous days
SELECT day, amount,
       amount - LAG(amount) OVER (ORDER BY day) AS change_vs_prev
FROM daily_sales;

Self join frente a función de ventana

Tenga en cuenta la disyuntiva:

  • Un self join compara filas mediante una relación de valores (mismo departamento, fecha anterior). Es flexible, pero puede multiplicar las filas y gestionar mal los saltos.
  • Una función de ventana compara mediante la posición ordinal dentro de una partición ordenada. Es más clara para la lógica de fila anterior o siguiente.

Para «comparar con la fila adyacente», prefiera LAG/LEAD. Para «encontrar todos los pares que cumplen una condición», el self join es la herramienta natural.

Encontrar filas que superan a sus pares

Otro patrón: encontrar empleados que ganan más que al menos un colega de su departamento. Un self join lo expresa directamente.

Unimos cada empleado con otros del mismo departamento que ganan menos y, después, conservamos los empleados distintos que aparecen. Esto se lee casi como la frase original.

SELECT DISTINCT a.name, a.department, a.salary
FROM employees a
JOIN employees b
  ON a.department = b.department
 AND a.salary > b.salary;

Vigile la multiplicación de filas

Los self joins sobre una columna no única multiplican las filas. Emparejar a las personas de un departamento de 100 empleados produce aproximadamente 100 x 100 pares candidatos antes de filtrar.

Incluya siempre el predicado que elimina duplicados (a.id < b.id) y añada DISTINCT o una agrupación cuando solo necesite las filas participantes, no cada par. Mencione en las entrevistas que tiene en cuenta esta multiplicación de filas.

Elegir la herramienta de comparación

Guía para decidir cómo comparar datos dentro de una tabla:

  • Todos los pares coincidentes (duplicados, combinaciones del mismo grupo): self join con a.id < b.id.
  • La fila anterior o siguiente en un orden: función de ventana (LAG/LEAD).
  • Comparar cada fila con un agregado del grupo: subconsulta correlacionada o agregado de ventana.

Comprobación rápida

Necesita obtener cada par único de productos que comparten la misma categoría, sin emparejar ningún producto consigo mismo y sin duplicar el orden de los pares.

Resumen: comparar filas dentro de una misma tabla

Aspectos clave:

  • Use un self join de la tabla consigo misma para emparejar sus propias filas al buscar duplicados y combinaciones del mismo grupo.
  • Use a.id < b.id para eliminar los pares de una fila consigo misma y los duplicados invertidos con un solo predicado.
  • Las comparaciones de adyacencia mediante self join fallan cuando hay saltos; prefiera LAG/LEAD para la lógica de fila anterior o siguiente.
  • Tenga siempre en cuenta el fan-out al hacer joins sobre columnas no únicas.

Preguntas frecuentes

¿La lección «Comparar filas dentro de una tabla» es gratis?

Sí — el texto completo de «Comparar filas dentro de una tabla» 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 «Comparar filas dentro de una tabla»?

Use patrones de self-join para encontrar pares, duplicados y registros adyacentes 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 3 de 4.

¿Cuánto tiempo toma la lección «Comparar filas dentro de una tabla»?

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

  1. CROSS JOIN y productos cartesianos
  2. SELF JOIN para jerarquías
  3. Comparar filas dentro de una tabla
  4. Elegir el tipo de join adecuado
← Volver a Coding Interview Prep