SQL Server TOP / TOP WITH TIES

Yazdığımız sorgu sonucunda belirli sayıda veya belirli yüzdede ki (100.000 satırın %10 u gibi) satır sayısı döndürmek istediğimizde TOP ifadesini kullanırız. ORDER BY ile kullandığımızda sıralama yapılmış sorgu sonucundan ilk N sayıda satırı döndürmemizi sağlar aksi takdirde herhangi sıralama olmadan ilk N sayıda satırı döndürür.

TOP ifadesinin temelde iki çeşit kullanımı vardır.

SELECT TOP N [Kolon1],[Kolon2],....
FROM TABLO_ADI

Sorgu sonucunda N kadar kayıt döndürür

SELECT TOP N PERCENT [Kolon1],[Kolon2],....
FROM TABLO_ADI

Sorgu sonucunda toplam satır sayısının Yüzde N kadar kayıt döndürür. (100 kayıt bulunan bir tabloda TOP 10 PERCENT  10 satır döndürür)

Elimizde Cars adında bir tablomuz olduğunu ve marka,renk kilometre bilgisini tuttuğumuzu varsayalım

CREATE TABLE Cars (BRAND VARCHAR(15), Color VARCHAR(10), KM int  );  
INSERT Cars VALUES  
    ('Mercedes','Black', 26000), 
	('Mercedes','White', 10000), 
	('Mercedes','Blue', 26000), 
	('Mercedes','Gray', 26000), 
	('BMW','Black', 26000), 
	('BMW','Black', 30000), 
	('Audi','White', 31000), 
	('BMW','Gray', 15000), 
	('BMW','Blue', 32000), 
	('Mercedes','Black', 35000);
Resim 1

Örnek senaryomuzda elimizdeki en düşük kilometreye sahip 3 aracı bulmak istediğimizde aşağıdaki sorgu ile sonuca varabiliriz.

	SELECT TOP 3 *
	FROM CARS
	ORDER BY KM
Resim 2

Yukardaki sorgudaki gibi en düşük kilometreli 3 araç yerine belirli bir yüzde üzerinden gitmek istediğimizde örnek olarak elimizdeki araçlardan en düşük kilometreye sahip araçların %20 sini bulmak istediğimizde aşağıdaki sorgu ile sonuca ulaşabiliriz.

SELECT TOP 20 PERCENT *
	FROM CARS
	ORDER BY KM
Resim 3

Buraya kadar olan TOP komutunun kullanımı genel olarak bilinen bir kullanım türüdür.

Yukardaki örneğimizde en düşük kilometreye sahip 3 aracı listelemek istediğimizde gözümüzden kaçan bir durum ortaya çıkıyor. Eğer ki  3.satırda gelen veriye eşit başka satırlar varsa bunun gösterimini nasıl sağlayacağız

Resim 4

Yukardaki resimde gördüğümüz üzere TOP 3 dediğimizde sadece 3 satır döndürüyor ama bizim tablomuzda 3. Satır ve 4,5,6 numaralı satırlardaki kilometre bilgisi birbirine eşit bu durumda 3.lük sıralamasını paylaşan 4 araç olması gerekiyor. Farklı bir senaryo olarak en çok satış yapan 3 çalışanı listelemek istediğimizde 3. Ve 4. Eleman aynı sayıda satış yaptı ise 4.olan elemana haksızlık yapmış olabiliriz.

Bu durumun önüne geçmek için TOP komutuyla birlikte “WITH TIES” kullanmamız gerekmektedir. Bir örnek üzerinde bakalım.

WITH TIES kullanımı

SELECT TOP N WITH TIES [Kolon1],[Kolon2],....
FROM TABLO_ADI

SELECT TOP N PERCENT WITH TIES [Kolon1],[Kolon2],....
FROM TABLO_ADI
Resim 5

Elimizdeki en düşük kilometreye sahip 2 aracı listelemek istediğimizde;

SELECT TOP 2 WITH TIES *
FROM CARS
ORDER BY KM

Şeklinde kullandığımızda bize 2 satır döndürecektir. Çünkü 2.satır ile eşit değere sahip başka bir kayıt bulunmamaktadır.

Elimizdeki en düşük kilometreye sahip 3 aracı listelemek istediğimizde;

SELECT TOP 3 WITH TIES *
FROM CARS
ORDER BY KM

Şeklinde kullandığımızda bize 6 satır döndürecektir. Çünkü 3.satır ile eşit değere sahip 3 satır daha bulunmaktadır.

WITH TIES komutuyla TOP N PERCENT ile kullanımına örnek verecek olursak

SELECT TOP 30 PERCENT WITH TIES *
FROM CARS 
ORDER BY KM
Resim 6

TOP 30 PERCENT ile tablomuzun ilk %30’luk bölümünü listeledik ve 3 satır döndü. WITH TIES komutu 3.satırın değerine eşit satırları getirdiğimizde 6 satır döndüğünü görüyoruz.

Bu yazımda kısaca TOP komutunun kullanımını ve kullanırken dikkatimizden kaçan veya göz ardı ettiğimiz bir duruma karşı WITH TIES kullanımını anlatmaya çalıştım. Umarım faydalı olmuşumdur

Leave a Reply

Your email address will not be published. Required fields are marked *