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

今回は Oracle SQL で「特定の件数ごと(10件目、20件目…)」のデータを取得する方法を解説します。
利用場面
大量のデータを扱うとき、「すべての行」ではなく「特定の件数ごとにサンプルを取り出したい」という場面があります。たとえば――
- テスト環境で、大量データの中から一定間隔で抜き出して動作確認したいとき
- 一覧表示やレポート作成で、10件目・20件目といった区切り行だけを取得したいとき
- 分析用にサンプリングしてデータの傾向をざっくり把握したいとき
- SELECT-INSERTで特定の件数INSERTを実行するとき
こうした場面では、Oracle SQLの ROWNUM
と MOD
関数を組み合わせることで、「10件ごと」「100件ごと」といった規則的な間隔でデータを簡単に取得できます。
サンプルデータ
例として、以下のような USER
テーブルを用意します。
ID | NAME | ADDRESS |
---|---|---|
1000 | 一郎 | 東京都○○区○○番地 |
2000 | 二郎 | 東京都○○区○○番地 |
・・・ | ||
10000 | 十郎 | 東京都○○区○○番地 |
・・・ | ||
20000 | 二十郎 | 東京都○○区○○番地 |
・・・ |
10件ごとに抽出するSQL
Oracleでは ROWNUM
と MOD
関数を組み合わせることで、一定間隔でデータを取得できます。
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 件のコメント:
コメントを投稿
コメントをお待ちしています。