Bu tür sorguları kafa karıştırıcı ayrı veriler tanımlamak yerine, SQL Server'a aşina herkesin bilgisi dahilinde 🎯 olan en basit veri tabanı 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 tabi 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
Şu anda ücreti 14.00 olan 4 adet ürün olduğunu kesin bir şekilde biliyoruz. Ancak select top 3 UnitPrice,* from Products where UnitPrice=14
sorgusunu gönderirsek 4 yerine 3 satır sonuç alırız çünkü implicitly bir şekilde tüm gelen satırları değil sadece 3 satırı istedik. Bunu explicitly belirttiğimiz 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
kullanmadanWITH TIES
kullanamazsınız.ORDER BY
kullanmadanWITH TIES
kullanamazsınız.ORDER BY
kullanıyor olsak da satırlar rastgele bir sırada gelecektir.
TOP (Transact-SQL) ArgumentsWhat is the use of WITH TIES keyword in SELECT statement in SQL Queries?
0 Yorum