sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLでのRandom()のしくみ

    PostgreSQLでは、random() 関数は、0.0 <=x<1.0の範囲の疑似乱数値を返します。

    これは、最も古く、最もよく知られている疑似乱数生成アルゴリズムの1つである単純な線形合同アルゴリズムを使用します。

    疑似乱数は、ランダムに見えるが、真にランダムではない数です。疑似乱数は、その値が既知のシードによって生成されたため、真にランダムではありません。ただし、ユーザーがシードまたはそれを作成したアルゴリズムの知識がない場合は、ランダムに表示されます。

    したがって、多くのアプリケーションでは、疑似乱数で十分と見なされることがよくあります。

    random()を使用して疑似乱数を生成する例を次に示します。 機能。

    SELECT random();

    結果:

    0.625357600199532

    呼び出すたびに結果が明らかに異なります。

    同じステートメントで関数を3回呼び出す別の例を次に示します。

    SELECT 
      random(),
      random(),
      random();

    結果:

     random            | random              | random
    -------------------+---------------------+--------------------
     0.594431747016209 | 0.22816249693650903 | 0.7168820259873314

    1から10までのランダムな数字

    これは、0から10までの正の数を生成する例です。

    SELECT random() * 10 + 1;

    結果:

    4.564859004063727

    明確にするために、これは1以上10未満のランダムな数を生成します。

    ランダム整数

    trunc()などの関数を使用できます またはfloor() 乱数を整数として返します。

    SELECT 
      trunc(random() * 10 + 1),
      floor(random() * 10 + 1);

    結果:

     trunc | floor
    -------+-------
         1 |     8

    ランダム行を返す

    random()を使用できます ORDER BYで ランダムな行を返すデータベースクエリの句。

    pagilaにクエリを実行する例を次に示します。 サンプルデータベース。

    SELECT 
      film_id,
      title
    FROM film 
    ORDER BY random() LIMIT 5;

    結果:

     film_id |        title        
    ---------+---------------------
         116 | CANDIDATE PERDITION
         806 | SLEEPY JAPANESE
         892 | TITANIC BOONDOCK
         826 | SPEED SUIT
         612 | MUSSOLINI SPOILERS

    そして、もう一度実行すると、次のようになります。

     film_id |       title        
    ---------+--------------------
         450 | IDOLS SNATCHERS
         827 | SPICE SORORITY
         593 | MONTEREY LABYRINTH
         529 | LONELY ELEPHANT
         591 | MONSOON CAUSE

    大きなテーブルがあり、すべての行(または多数の行)を返す必要がある場合は、クエリを次のように変更することをお勧めします。

    SELECT *
    FROM film 
    WHERE film_id IN 
      (SELECT film_id FROM film ORDER BY random() LIMIT 5);

    繰り返し可能なランダムな数字を作成する

    Postgresにはsetseed()もあります 後続のrandom()のシードを設定できる関数 同じセッション内の呼び出し。

    setseed()を使用できます 繰り返し可能なrandom()を生成します 呼び出します。

    例については、PostgresでのSetseed()の動作を参照してください。


    1. エラー1130(HY000):ホスト''はこのMySQLサーバーに接続できません

    2. MicrosoftAccessでナビゲーションフォームを作成する方法

    3. SQLServerにUpdateストアドプロシージャを挿入します

    4. SQLINSERTステートメントにPythondictを使用する