トップN分析、上位 n レコード、 n〜m レコードの取得
SELECT 文 にて条件を伴う上位の n レコードを取得したい場合には ROWNUM によるインラインビューを使用してネストした問い合わせをインライン化するか ROW_NUMBER 分析関数 を使用する。
ROW_NUMBER 分析関数による TOP n 件抽出
ROW_NUMBER() を使用する場合
SELECT NO FROM (
SELECT ROW_NUMBER() OVER (ORDER BY NO) RNO, NO FROM ROWNUM_TEST
)
WHERE RNO <= 5
ORDER BY NO ;
インラインビューによる TOP n 件抽出
SELECT NO FROM (
SELECT NO FROM ROWNUM_TEST
ORDER BY NO
)
WHERE ROWNUM <= 5
ORDER BY NO ;
中間順位での取り出し
ROW_NUMBER 関数 の場合
Top n の取り出しと同じ
SELECT NO FROM (
SELECT ROW_NUMBER() OVER (ORDER BY NO) RNO, NO FROM ROWNUM_TEST
)
WHERE RNO BETWEEN 5 AND 10
ORDER BY NO;
インラインビューの場合
ROW_NUMBER 関数に比べてかなり長くなる
SELECT NO FROM (
SELECT NO, ROWNUM RNO FROM (
SELECT NO FROM ROWNUM_TEST
ORDER BY NO
)
) WHERE RNO BETWEEN 5 AND 10
ORDER BY NO;
SQL 関連事項