DB

Oracle上でソートして上位n件のデータを取得してみた

データベース上のデータを抽出する際、ある一定の規則でソートして上位n件のデータを取得したい、という場合がある。今回は、Oracle上で、以前作成したUSER_DATAテーブル上で、IDの昇順にソートし上位5件を取得するSQLを作成してみたので、共有する。

前提条件

Oracle XEのインストールが完了し、以下のUSER_DATAテーブルが作成済であること。
前提条件_1

また、USER_DATAテーブルに以下のデータが追加されていること。

前提条件_2

データを加工しソートし取得するSQL

前提条件で作成済のUSER_DATAテーブルのデータを、生年月日と性別を加工した上で、IDの昇順にソートするSQLの実行結果は、以下の通り。

データを加工しソートし取得するSQL実行結果



データを加工しソート後に上位5件を取得するSQL

USER_DATAテーブルのデータを、生年月日と性別を加工し、IDの昇順にソートした後で、上位5件のみを取得するSQLの実行結果は、以下の通り。このときのソート処理は、副問い合わせの中で行う必要がある。

データを加工しソート後に上位5件を取得するSQL実行結果



ROW_NUMBER 分析関数を利用したSQL

先ほどのSQLと同様のことを、ROW_NUMBER 分析関数を利用して実行した結果は、以下の通り。このとき、ROW_NUMBER分析関数内のORDER BY句で指定した順にデータがソートされることも確認できる。

ROW_NUMBER 分析関数を利用したSQL実行結果

要点まとめ

  • Oracle上でソートして上位n件のデータを取得するには、SQLの副問い合わせ内でソートした後でROWNUM関数で上位n件を取得するか、ROW_NUMBER 分析関数を利用しすればよい。