1. ホーム
  2. postgresql

[解決済み] Postgres の迅速なランダム行選択

2022-10-26 21:53:48

質問

Postgresに数百万行を含むテーブルがあります。私はインターネット上でチェックし、私は次のことを発見しました。

SELECT myid FROM mytable ORDER BY RANDOM() LIMIT 1;

このクエリを作成する他の方法、またはテーブルをすべて読まずにランダムな行を選択する直接の方法はありますか?ちなみに'myid'は整数ですが、空のフィールドでもかまいません。

どのように解決するのですか?

を使って実験してみるとよいでしょう。 OFFSET のように

SELECT myid FROM mytable OFFSET floor(random() * N) LIMIT 1;

N の行数です。 mytable . あなたは、最初に SELECT COUNT(*) の値を把握するために N .

更新 (by Antony Hatchkins)

を使用する必要があります。 floor を使う必要があります。

SELECT myid FROM mytable OFFSET floor(random() * N) LIMIT 1;

2行のテーブルを考える。 random()*N0 <= x < 2 を生成し、例えば SELECT myid FROM mytable OFFSET 1.7 LIMIT 1; は暗黙のうちに最も近いint型に丸めるため、0行を返します。