Oracleでソートされた結果を先頭からXX行目まで取得する方法
例えば、Oracleの商品テーブルに以下のデータがあったとする。
商品テーブル
id | name | price |
---|---|---|
1 | 本 | 560 |
2 | 黒ペン | 120 |
3 | 赤ペン | 150 |
4 | 高級万年筆 | 1500 |
5 | ノート | 300 |
値段が高いものから3つまで表示したいときは、
PostgreSQLやMySQLの場合は、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 |