En SQL, la opción WITH TIES se utiliza junto con ORDER BY y la construcción que limita el número de filas (TOP o FETCH FIRST ... ROWS ONLY). Permite devolver no solo las estrictamente N primeras filas, sino también todas las filas cuyos valores en el campo de ordenación coinciden con la última (N-ésima) fila.
Cuándo es necesario: en análisis, clasificaciones, tableros de líderes, cuando es importante incluir un "empate" o grupos con la misma clasificación.
Ejemplo (SQL Server):
SELECT TOP 3 WITH TIES * FROM Sales ORDER BY Amount DESC;
Si el 3er y 4to lugar tienen la misma suma de ventas, se devolverán ambas filas.
En PostgreSQL:
SELECT * FROM Sales ORDER BY Amount DESC FETCH FIRST 3 ROWS WITH TIES;
Importante: funcionará solo con ORDER BY, de lo contrario, el resultado será impredecible.
¿Qué diferencia hay entre simplemente
TOP N/LIMITy usarWITH TIES?
Una respuesta incorrecta común: "WITH TIES simplemente limita las filas, es un sinónimo".
Respuesta correcta:
TOP N/LIMIT — devolverá exactamente N filas, incluso si las siguientes tienen el mismo valor de ordenación.WITH TIES — añadirá todas las filas cuyos campos de ordenación coinciden con la última (N-ésima).Ejemplo:
-- Seleccionar los 2 mejores resultados, pero si hay un "empate" — obtener también esos: SELECT TOP 2 WITH TIES Name, Score FROM Results ORDER BY Score DESC;
Historia
Proyecto: Concurso de clasificaciones estudiantiles. Error: Usaron simplemente
LIMIT 3, y varios estudiantes con la misma puntuación quedaron fuera de la lista de ganadores — los verdaderos ganadores fueron erróneamente "cortados".
Historia
Proyecto: Análisis de comercio electrónico. Error: Querían mostrar los 5 productos más populares, pero al tener el mismo SKU en ventas solo mostraron los primeros 5, y más tarde, durante una auditoría, notaron que algunos éxitos no aparecieron en el informe.
Historia
Proyecto: Reportes de ventas de sucursales. Error: El cliente esperaba ver todos los líderes con resultados iguales, pero el desarrollador no conocía
WITH TIES— los resultados fueron incorrectos, el cliente presentó una queja sobre la calidad de los datos.