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);
Ö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
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
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
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
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