Rank over partition by ne işe yarar?
Kullanımını anlamak için örneğiniz var mı?
Nerelerde ne zaman kullanmalıyız?
Rank over partition by ne işe yarar?
Kullanımını anlamak için örneğiniz var mı?
Nerelerde ne zaman kullanmalıyız?
// Comments are closed.
Bayağı kullanışlı bir komut oluyor kendileri.
Elimizde bir tablo var mesela maaşların tutulduğu bir liste. Her departmanın en fazla maaşını alan kişiyi çekmek istesek nasıl bir sorgu yazarız dediğimiz zaman kullanılabilecek oracle fonksiyonu olarak karşımıza rank() over(partition by….) çıkıyor. Örnek verelim;
Bu listey bir sorgu çekmek istediğimiz zaman biz bütün tablonun departmana göre kırılımlarını almamız ve kendi içinde bir sıralamaya (ranking) sokmamız lazım, daha sonra en üstteki adamları alabiliriz.
select ml.*,
rank() over(partition by ml.departman order by maas desc) rnk
from maas_listesi ml;
Şimdi bu yukarıda yazdığımız sorgunun ne işe yaradığını anlatayım biraz.
rank() zaten oracle fonksiyonu. over(partition by ml.departman bu kısım tablo üzerinde departmanlar üzerinden bir partition(alt bölümler/tablolar) ayıracağımızı söylüyoruz. order by maas desc dediğimiz zaman ise bu departman içindeki maaşları büyükten küçüğe doğru sıralayın diyoruz. Bu sorgu sonucu aşağıdaki görüntü elimize gelecek
Burada artık yapmamız gereken bu sorgunun bir üst sorgusuna çıkıp rnk değerleri 1 olan kayıtları almak
select *
from (select ml.*,
rank() over(partition by ml.departman order by maas desc) rnk
from maas_listesi ml) x
where x.rnk = 1
Bu sorgunun sonucu da aşağıdaki gibi çıkacak
Umarım anlatabilmişimdir.