В SQL опция WITH TIES применяется вместе с ORDER BY и конструкцией ограничения количества строк (TOP или FETCH FIRST ... ROWS ONLY). Она позволяет вернуть не только строго N первых строк, но и все строки, у которых значения в поле сортировки совпадают с последней (N-ой) строкой.
Когда это нужно: при аналитике, рейтингах, лидербордах, когда важно включить "ничью" или группы с одинаковым рейтингом.
Пример (SQL Server):
SELECT TOP 3 WITH TIES * FROM Sales ORDER BY Amount DESC;
Если 3-е и 4-е место имеют одинаковую сумму продаж, вернутся обе строки.
В PostgreSQL:
SELECT * FROM Sales ORDER BY Amount DESC FETCH FIRST 3 ROWS WITH TIES;
Важно: сработает только с ORDER BY, иначе результат непредсказуем.
Чем отличается просто
TOP N/LIMITот использованияWITH TIES?
Частый неверный ответ: "WITH TIES просто лимитирует строки, это синоним".
Правильный ответ:
TOP N/LIMIT — вернёт ровно N строк, даже если у следующих одинаковое значение сортировки.WITH TIES — добавит все строки, у которых поле сортировки совпадает с последней (N-ой).Пример:
-- Выбрать 2 лучших результата, но если есть "ничья" — получить и их: SELECT TOP 2 WITH TIES Name, Score FROM Results ORDER BY Score DESC;
История
Проект: Конкурс студенческих рейтингов. Ошибка: Использовали просто
LIMIT 3, и несколько студентов с одинаковым баллом оказались за пределами списка победителей — реальные призёры были ошибочно "отрезаны".
История
Проект: E-commerce аналитика. Ошибка: Хотели показать топ-5 популярных товаров, но при одинаковом SKU по продажам показывали только первые 5, а позже при аудите заметили, что часть хитов не попала в отчет.
История
Проект: Отчётность по продажам филиалов. Ошибка: Клиент ожидал видеть всех лидеров при равном результате, но разработчик не знал о WITH TIES — итоги были некорректны, заказчик предъявил претензию к качеству данных.