web-dev-qa-db-ja.com

Oracleデータベースからレコードをランダムに取得する方法は?

Oracle DBから行をランダムに選択する必要があります。

例:100行からなるテーブルを想定します。100行全体から20個のレコードをランダムに返す方法を考えます。

64
Bhadra
    SELECT *
    FROM   table
    ORDER BY DBMS_RANDOM.VALUE FETCH NEXT 20 ROWS ONLY;
95
cagcowboy

SAMPLE()granteedではなく、正確に20行を提供しますが、適切かもしれません(そして、完全なクエリ+大きなテーブルの場合はランダムに並べ替え):

SELECT *
FROM   table SAMPLE(20);

注:ここの20はおおよその割合であり、必要な行数ではありません。この場合、100行あるため、約20行を取得するには20%のサンプルを要求します。

40
Jeffrey Kemp
SELECT * FROM table SAMPLE(10) WHERE ROWNUM <= 20;

これは、テーブルをソートする必要がないため、より効率的です。

12
grokster
SELECT column FROM
( SELECT column, dbms_random.value FROM table ORDER BY 2 )
where rownum <= 20;
9
Bishan

20行をランダムに選択するには、それらの多くをランダムに順序付けて選択し、そのセットの最初の20行を選択する方が良いと思います。

何かのようなもの:

Select *
  from (select *
          from table
         order by dbms_random.value) -- you can also use DBMS_RANDOM.RANDOM
 where rownum < 21;

データの大部分を選択して大部分を破棄しないようにするために、小さなテーブルに最適です。

4
Nishant Sharma