In SQL wird die Option WITH TIES zusammen mit ORDER BY und der Begrenzungsanweisung (TOP oder FETCH FIRST ... ROWS ONLY) verwendet. Sie ermöglicht es, nicht nur strikt die ersten N Zeilen zurückzugeben, sondern auch alle Zeilen, bei denen die Werte im Sortierfeld mit der letzten (N-ten) Zeile übereinstimmen.
Wann ist das notwendig: bei Analysen, Ranglisten, Leaderboards, wenn es wichtig ist, "Unentschieden" oder Gruppen mit derselben Bewertung einzuschließen.
Beispiel (SQL Server):
SELECT TOP 3 WITH TIES * FROM Sales ORDER BY Amount DESC;
Wenn der 3. und 4. Platz denselben Verkaufsbetrag haben, werden beide Zeilen zurückgegeben.
In PostgreSQL:
SELECT * FROM Sales ORDER BY Amount DESC FETCH FIRST 3 ROWS WITH TIES;
Wichtig: funktioniert nur mit ORDER BY, andernfalls ist das Ergebnis unvorhersehbar.
Was unterscheidet einfach
TOP N/LIMITvon der Verwendung vonWITH TIES?
Eine häufige falsche Antwort: "WITH TIES limitiert einfach die Zeilen, es ist ein Synonym".
Richtige Antwort:
TOP N/LIMIT — gibt genau N Zeilen zurück, selbst wenn die nächsten den gleichen Sortierwert haben.WITH TIES — fügt alle Zeilen hinzu, bei denen das Sortierfeld mit der letzten (N-ten) übereinstimmt.Beispiel:
-- Wählen Sie die 2 besten Ergebnisse, aber wenn es ein "Unentschieden" gibt – auch diese: SELECT TOP 2 WITH TIES Name, Score FROM Results ORDER BY Score DESC;
Geschichte
Projekt: Wettbewerb um Studentenrankings. Fehler: Verwendeten einfach
LIMIT 3, und mehrere Studenten mit derselben Punktzahl wurden außerhalb der Liste der Gewinner angezeigt – echte Preisträger wurden fälschlicherweise "abgeschnitten".
Geschichte
Projekt: E-Commerce-Analyse. Fehler: Wünschten, die Top-5 der beliebten Produkte zu zeigen, aber bei identischen SKUs in den Verkäufen wurden nur die ersten 5 angezeigt, und später wurde bei der Prüfung festgestellt, dass einige Hits nicht im Bericht enthalten waren.
Geschichte
Projekt: Berichterstattung über Verkaufszahlen von Filialen. Fehler: Der Kunde erwartete, alle Führenden bei gleichen Ergebnissen zu sehen, aber der Entwickler wusste nichts von WITH TIES – die Ergebnisse waren inkorrekt, der Kunde erhob eine Beschwerde über die Datenqualität.