搾りたての工数と干からびた社畜

99%の雑記と1%プログラミングメモなど

【SQL(ORACLE)】ROWNUMとORDER BYを併用し、「上からN番目まで」のデータを取得する

下記テーブルから給与の上位5人を出すSQLを書くとしましょう。

f:id:enfor:20160407234216j:plain

 

出したい結果は以下のとおりです。

f:id:enfor:20160407231144j:plain

 

で、下記のようなSQLを書くともれなく不正解です。

結果は以下のとおり

f:id:enfor:20160407231149j:plain

これはORDER BY句が最後に実行されることに起因します。並び替える前にWHERE句の「ROWNUM <= 5」で並びが無秩序なまま5行抜き出されるわけですね。

なので、インラインビューの中で並び替えてから、5行抜き出せばいいわけです。

上記のSQLで無事取得

 

 

※追記

Oracle12cからはFETCH句というものが出ており、ORDER BY句の後ろに記述す津ことにより、上記と同様のことが可能な模様