SQL

Oracle SQLで10件ごとにデータを取得する方法【ROWNUM+MOD活用】

SQL

今回は Oracle SQL で「特定の件数ごと(10件目、20件目…)」のデータを取得する方法を解説します。

利用場面

大量のデータを扱うとき、「すべての行」ではなく「特定の件数ごとにサンプルを取り出したい」という場面があります。たとえば――

  • テスト環境で、大量データの中から一定間隔で抜き出して動作確認したいとき
  • 一覧表示やレポート作成で、10件目・20件目といった区切り行だけを取得したいとき
  • 分析用にサンプリングしてデータの傾向をざっくり把握したいとき
  • SELECT-INSERTで特定の件数INSERTを実行するとき

こうした場面では、Oracle SQLの ROWNUMMOD 関数を組み合わせることで、「10件ごと」「100件ごと」といった規則的な間隔でデータを簡単に取得できます。

サンプルデータ

例として、以下のような USER テーブルを用意します。

ID NAME ADDRESS
1000 一郎 東京都○○区○○番地
2000 二郎 東京都○○区○○番地
・・・
10000 十郎 東京都○○区○○番地
・・・
20000 二十郎 東京都○○区○○番地
・・・

10件ごとに抽出するSQL

Oracleでは ROWNUMMOD 関数を組み合わせることで、一定間隔でデータを取得できます。

    
SELECT
       A.ID
     , A.NAME
     , A.ADDRESS
  FROM
       (
           SELECT
                  ID
                , NAME
                , ADDRESS
             FROM 
                  USER 
            ORDER BY
                  ID
       ) A
 WHERE MOD(ROWNUM. 10) = 0
  

ROWNUM によって行番号を付与し、MOD(ROWNUM, 10) = 0 とすることで「10の倍数行(10件目、20件目…)」を抽出できます。

実行結果例

ID NAME ADDRESS
1000 一郎 東京都○○区○○番地
10000 十郎 東京都○○区○○番地
20000 二十郎 東京都○○区○○番地

このようにして、大量データの中から「区切りの位置だけ」を取得することが可能です。 ぜひ実際の環境で試してみてください。

コメント

0 件のコメント:

コメントを投稿

コメントをお待ちしています。