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 |