Gebruik van het argument WITH TIES in T-SQL

En zo word je weer eens verrast door een functionaliteit van T-SQL waar je het bestaan niet van wist. WITH TIES dient een heel specifiek doel, dus echt vaak zul je hem sowieso niet gaan gebruiken. Maar toch is het interessant om na te denken in welke gevallen dit argument van pas zou kunnen komen. Tijd voor een korte toelichting!

Een mooi voorbeeld waarbij je WITH TIES zou kunnen gebruiken is wanneer in een wedstrijd een eerste, tweede en derde plaats wordt beloond met een medaille. Wanneer 2 deelnemers beiden dezelfde score hebben voor de bronzen medaille, wil je in de resultaten 4 deelnemers terugzien. Stel je nu een tabel voor met daarin het aantal schapen per land. Je wilt graag de top 3 landen met meeste schapen hebben. Stel je de volgende tabel met waarden voor (dit is natuurlijk volledig fictief):

land aantal
Nederland 2.000
België 1.800
Frankrijk 1.200
Oostenrijk 1.200
Duitsland 800

Bekijk je de waarden, dan zul je zien dat het niet eenvoudig is om een top 3 te maken. Logischerwijs zitten Nederland en België erbij, maar zowel Frankrijk als Oostenrijk hebben beiden 1.200 schapen. Het is een TIE tussen deze twee landen. Wil je in dat geval bij een TOP 3 dan ook deze beide landen in het resultaat terugzien (waarbij een TOP 3 dus 4 resultaten oplevert), dan zul je WITH TIES moeten gebruiken. In dat geval ziet de query er als volgt uit:


SELECT		TOP 3 land, aantalSchapen WITH TIES
FROM			tblLand
ORDER BY		aantalSchapen DESC
			

Het is goed om aandacht te besteden aan de performance van dit soort queries. Er zijn alternatieve schrijfwijzen denkbaar die in bepaalde situaties beter presteren. Zeker bij tabellen met veel data kan een ORDER BY een impact hebben. In de meeste gevallen echter niets wat een goed geplaatste INDEX niet prima kan oplossen.

Over mij

Mijn naam is Marcel van Langen. Ik ben werkzaam als freelancer. Een harde en eerlijke werker, met een passie voor doelgerichte oplossingen. Ik voer al jaren mooie klussen uit voor geweldige klanten. Mijn technische specialisaties zijn het Thinkwise platform, SQL Server en ColdFusion development.

Lees verder...
Diensten