Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi

Sorunuz mu var? Belki de çoktan soruldu..

1
Oracle Rank over ne işe yarar?

Çözüldü 1 Cevaplar 70 Gösterim Veri Tabanı
Rank over partition by ne işe yarar?

Kullanımını anlamak için örneğiniz var mı?

Nerelerde ne zaman kullanmalıyız?

1 cevap

1
En İyi Cevap

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;

DepartmanCalisan NoMaas
Muhasebe2342500
Muhasebe2322900
Muhasebe1010000
IT4246000
IT4516500
IT1213424
Yonetim112999
Yonetim210999

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

DepartmanCalisan NoMaasRnk
Muhasebe10100001
Muhasebe23229002
Muhasebe23425003
IT12134241
IT45165002
IT42460003
Yonetim2109991
Yonetim1129992

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

Muhasebe10100001
IT12134241
Yonetim1129991

Umarım anlatabilmişimdir.

10 Ekim 2017 kenan (2,833 puan) cevapladı
18 Ekim 2017 tolga seçti
...