PostgreSQL では、テーブルからランダムな行を選択するために、TABLESAMPLE 句または RANDOM() 関数を ORDER BY 句および LIMIT 句と組み合わせて使用​​できます。方法を見てみましょう

  • RANDOM() 関数を使用して PostgreSQL からランダムな行を取得します。
  • TABLESAMPLE句を使用してPostgreSQLからランダムな行を取得する

方法 1: TABLESAMPLE 句を使用する

TABLESAMPLE 句を使用すると、テーブルから行のサンプルを取得できます。TABLESAMPLE は PostgreSQL バージョン 9.5 以降でサポートされていることに注意してください。

SELECT * FROM your_table TABLESAMPLE BERNOULLI (percentage);

BERNOULLI (percentage): サンプリングするテーブルの割合を指定します。

Student_detail テーブルを使用します。

PostgreSQLからランダムな行を選択する 1

たとえば、「student_detail」テーブルから約 30% の行を選択するには、次のようにします。

SELECT *
FROM student_detail
TABLESAMPLE BERNOULLI (30);

出力:

PostgreSQLからランダムな行を選択する 2

方法2: RANDOM() 関数を使用する

RANDOM() 関数は、0 から 1 の間の乱数を生成します。これを ORDER BY および LIMIT と組み合わせることで、指定した数のランダムな行を選択できます。

SELECT * FROM your_table ORDER BY RANDOM() LIMIT number_of_rows;

Student_detail テーブルを使用します。

PostgreSQLからランダムな行を選択する 3

例1: PostgreSQLでランダムにN行を選択:

たとえば、student_detail テーブルからランダムに 5 行を選択するには、次のようにします。

SELECT *
FROM student_detail
ORDER BY RANDOM()
LIMIT 5;

出力:

PostgreSQLからランダムな行を選択する 4

例2: PostgreSQL の行のランダム N パーセンテージを選択します。

select * from student_detail where random() < 0.7

0から1までの乱数を生成し、0.7未満の行を選択します。結果の表は次のようになります。

出力:

PostgreSQLからランダムな行を選択する 5

両方法のパフォーマンス比較

  • ORDER BY RANDOM (): この方法は簡単ですが、行ごとに乱数を生成し、テーブル全体を並べ替える必要があるため、大きなテーブルでは非効率的になる可能性があります。
  • TABLESAMPLE: この方法は、テーブル全体をソートする必要なく、ストレージ エンジンから行のサンプルを直接取得するため、大規模なテーブルではより効率的です。