Viac na
Ako obmedziť počet riadkov vrátených dotazom Oracle po zoradení?
Existuje spôsob, ako dosiahnuť, aby sa dotaz Oracle
správal tak, ako keby obsahoval klauzulu MySQL limit
?
V MySQL
to môžem urobiť:
select *
from sometable
order by name
limit 20,10
získať 21. až 30. riadok (vynechať prvých 20, dať ďalších 10). Riadky sa vyberajú za order by
, takže sa naozaj začína na 20. mene podľa abecedy.
V Oracle
ľudia spomínajú iba pseudoslúpec rownum
, ale ten sa vyhodnocuje pred order by
, čo znamená toto:
select *
from sometable
where rownum <= 10
order by name
vráti náhodnú sadu desiatich riadkov usporiadaných podľa mena, čo zvyčajne nie je to, čo chcem. Taktiež neumožňuje špecifikovať posun.
963
3
Môžete na to použiť poddotaz, ako napríklad
Analytické riešenie len s jedným vnoreným dotazom:
Rank()
by mohol byť nahradenýRow_Number()
, ale môže vrátiť viac záznamov, ako očakávate, ak existujú duplicitné hodnoty pre meno.(neotestované) niečo také by mohlo splniť svoju úlohu
Existuje aj analytická funkcia rank, ktorú môžete použiť na usporiadanie podľa.