Sıralama sonrasında bir Oracle sorgusu tarafından döndürülen satır sayısını nasıl sınırlayabilirim?
Bir Oracle
sorgusunun bir MySQL limit
cümlesi içeriyormuş gibi davranmasını sağlamanın bir yolu var mı?
MySQL`de bunu yapabilirim:
select *
from sometable
order by name
limit 20,10
- ila 30. sıraları almak için (ilk 20'yi atlayın, sonraki 10'u verin). Satırlar
sıralama ölçütü
nden sonra seçilir, bu nedenle gerçekten alfabetik olarak 20. isimden başlar.
Oracleda, insanların bahsettiği tek şey
rownumsözde sütunudur, ancak
order by`dan önce değerlendirilir, bu da şu anlama gelir:
select *
from sometable
where rownum <= 10
order by name
isme göre sıralanmış on satırdan oluşan rastgele bir küme döndürecektir ki bu genellikle istediğim şey değildir. Ayrıca bir ofset belirtmeye de izin vermiyor.
963
3
Bunun için aşağıdaki gibi bir alt sorgu kullanabilirsiniz
Yalnızca bir iç içe sorguya sahip analitik bir çözüm:
Rank()
yerine
Row_Number()` kullanılabilir, ancak ad için yinelenen değerler varsa beklediğinizden daha fazla kayıt dönebilir.(test edilmemiş) bunun gibi bir şey işinizi görebilir
Sıralama yapmak için kullanabileceğiniz analitik fonksiyon rank da vardır.