Oracle DBから行をランダムに選択する必要があります。
例:100行からなるテーブルを想定します。100行全体から20個のレコードをランダムに返す方法を考えます。
SELECT *
FROM table
ORDER BY DBMS_RANDOM.VALUE FETCH NEXT 20 ROWS ONLY;
SAMPLE() はgranteedではなく、正確に20行を提供しますが、適切かもしれません(そして、完全なクエリ+大きなテーブルの場合はランダムに並べ替え):
SELECT *
FROM table SAMPLE(20);
注:ここの20
はおおよその割合であり、必要な行数ではありません。この場合、100行あるため、約20行を取得するには20%のサンプルを要求します。
SELECT * FROM table SAMPLE(10) WHERE ROWNUM <= 20;
これは、テーブルをソートする必要がないため、より効率的です。
SELECT column FROM
( SELECT column, dbms_random.value FROM table ORDER BY 2 )
where rownum <= 20;
20行をランダムに選択するには、それらの多くをランダムに順序付けて選択し、そのセットの最初の20行を選択する方が良いと思います。
何かのようなもの:
Select *
from (select *
from table
order by dbms_random.value) -- you can also use DBMS_RANDOM.RANDOM
where rownum < 21;
データの大部分を選択して大部分を破棄しないようにするために、小さなテーブルに最適です。