なんちゃってウェブ系エンジニアの備忘録

某IT企業で働くなんちゃってウェブ系エンジニアが技術やデザインなど役に立ちそうなものなどを備忘録として載せていきます

Oracleでソートされた結果を先頭からXX行目まで取得する方法

例えば、Oracleの商品テーブルに以下のデータがあったとする。

商品テーブル

id name price
1 560
2 黒ペン 120
3 赤ペン 150
4 高級万年筆 1500
5 ノート 300

値段が高いものから3つまで表示したいときは、
PostgreSQLMySQLの場合は、Limitを使えば簡単なのだが、Oracleは使えないっ!

代わりに、取得行数を制限するROWNUMを使えばできるが、
ソートを含めたものを取得しようとうまくいかないときがある。

以下のような副問合せを利用することで、想定した結果を取得することが
可能になります。

select * from ( select name,price  FROM 商品 order by price desc ) 
where rownum <=3;

実行結果

id name price
4 高級万年筆 1500
1 560
5 ノート 300