In SQL wordt de WITH TIES optie gebruikt in combinatie met ORDER BY en een constructie om het aantal rijen te beperken (TOP of FETCH FIRST ... ROWS ONLY). Het staat toe om niet alleen strikt de eerste N rijen terug te geven, maar ook alle rijen waarvan de sorteerwaarde gelijk is aan die van de laatste (N-de) rij.
Wanneer is dit nodig: bij analyses, ranglijsten, leaderboards, wanneer het belangrijk is om "gelijkspel" of groepen met dezelfde ranking op te nemen.
Voorbeeld (SQL Server):
SELECT TOP 3 WITH TIES * FROM Sales ORDER BY Amount DESC;
Als de 3e en 4e plaats dezelfde verkoopwaarde hebben, worden beide rijen geretourneerd.
In PostgreSQL:
SELECT * FROM Sales ORDER BY Amount DESC FETCH FIRST 3 ROWS WITH TIES;
Belangrijk: werkt alleen met ORDER BY, anders is het resultaat onvoorspelbaar.
Wat is het verschil tussen alleen
TOP N/LIMITen het gebruik vanWITH TIES?
Een veel voorkomende foute antwoord: "WITH TIES beperkt gewoon de rijen, dit is een synoniem".
Juiste antwoord:
TOP N/LIMIT — retourneert precies N rijen, zelfs als de volgende rijen dezelfde sorteerwaarde hebben.WITH TIES — voegt alle rijen toe waarvan de sorteerwaarde gelijk is aan die van de laatste (N-de).Voorbeeld:
-- Selecteer de 2 beste resultaten, maar als er een "gelijkspel" is — krijg die ook: SELECT TOP 2 WITH TIES Name, Score FROM Results ORDER BY Score DESC;
Verhaal
Project: Wedstrijd met studentenranglijsten. Fout: Gebruikten gewoon
LIMIT 3, en enkele studenten met dezelfde score kwamen buiten de winnaarslijst — echte prijswinnaars werden onterecht "afgesneden".
Verhaal
Project: E-commerce analyse. Fout: Wouden de top-5 populaire producten tonen, maar met dezelfde SKU qua verkopen toonden ze alleen de eerste 5, en later tijdens een audit merkten ze op dat sommige hits niet in het rapport waren opgenomen.
Verhaal
Project: Rapportage over filialenverkopen. Fout: Klant verwachtte alle leiders te zien bij gelijke resultaten, maar de ontwikkelaar wist niet van WITH TIES — de uitkomsten waren onjuist, de klant stelde een klacht in over de datakwaliteit.