Bu tür sorguları herkesin bilgisi dahilinde olduğu için Northwind veri tabanı üzerinde göstermeyi tercih ediyorum. SQL Server TOP sorgularında kullanabileceğimiz argümanlardan bir tanesi WITH TIES diğeri PERCENT kullanımıdır. Kullanım örneği için öncelikle fiyat sıralı ürünlerin listesini alalım.


    select * from Products order by UnitPrice

Örneğin ücreti 14.00 olan 4 adet ürün olduğunu gözle görebiliyoruz. Ama tabii milyonlarca satırlık bir tablo olduğunu farzedersek tekrarlayan fiyatların sayısını almamız gerekir.


	select 
     UnitPrice
    ,count(UnitPrice) as PriceCount
	from Products
	group by
		UnitPrice
	order by 2 desc

Northwind Products group by Price

Şu anda ücreti 14.00 olan 4 adet ürün olduğunu kesin bir şekilde biliyorsunuz. Ancak select top 3 UnitPrice,* from Products where UnitPrice=14 sorgusunu gönderirseniz 4 yerine 3 satır sonuç alırsınız çünkü implicitly bir şekilde tüm gelen satırları değil sadece 2 satırı istediniz. Bunu explicitly belirttiğiniz satır dışında kayıt varsa onları da getirmek için kullanılan çözüm WITH TIES argümanıdır.


    select top 3 UnitPrice,* from Products where UnitPrice=14

Eşleşen tüm satırlar için WITH TIES kullanırız. Bu durumda açık bir şekilde TOP 3 gönderilmesine rağmen 4 satır sonuç döndürülecektir.


    select top 3 with ties UnitPrice,* from Products where UnitPrice=14 order by 1

Bu konu ile ilgili Microsoft dökümanlarında aşağıdaki satırlar yer alır.

Returns two or more rows that tie for last place in the limited results set. You must use this argument with the ORDER BY clause. WITH TIES might cause more rows to be returned than the value specified in expression. For example, if expression is set to 5 but two additional rows match the values of the ORDER BY columns in row 5, the result set will contain seven rows.

You can specify the TOP clause with the WITH TIES argument only in SELECT statements, and only if you've also specified the ORDER BY clause. The returned order of tying records is arbitrary. ORDER BY doesn't affect this rule.

Sonuç olarak,

  • WITH TIES kullanırsanız, TOP ile özellikle kaç satır istediğinizi belirtseniz dahi eğer daha fazla satır sonuç kümesi mevcutsa hepsi beraber döndürülür.
  • TOP kullanmadan WITH TIES kullanamazsınız.
  • ORDER BY kullanmadan WITH TIES kullanamazsınız.
  • ORDER BY kullanıyor olsak da satırlar rastgele bir sırada gelecektir.


TOP (Transact-SQL) Arguments
What is the use of WITH TIES keyword in SELECT statement in SQL Queries?