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

PostgreSQLでのSetseed()のしくみ

    PostgreSQLでは、setseed() 関数は、後続のrandom()のシードを設定します 呼び出し(-1.0から1.0までの値)。

    random() 関数は、単純な線形合同アルゴリズムを使用して疑似乱数を生成します。

    setseed()の場合 が呼び出され、後続のrandom()の結果 現在のセッションでの呼び出しは、setseed()を再発行することで繰り返すことができます 同じ議論で。

    これがどのように機能するかを示す例です。

    SELECT 
      setseed(0.8),
      random(), 
      random();

    結果:

     setseed | random             | random
    ---------+--------------------+--------------------
             | 0.7998745861323613 | 0.9776304992484732

    ここで、同じステートメントを再度実行すると、まったく同じ結果が得られます。

     setseed | random             | random
    ---------+--------------------+--------------------
             | 0.7998745861323613 | 0.9776304992484732

    明確にするために、両方のSELECTを実行したときのターミナルの完全な出力は次のとおりです。 同時にステートメント。

    SELECT 
      setseed(0.8),
      random(), 
      random();
    
    SELECT 
      setseed(0.8),
      random(), 
      random();

    結果:

    postgres=# SELECT 
    postgres-#   setseed(0.8),
    postgres-#   random(), 
    postgres-#   random();
     setseed |       random       |       random       
    ---------+--------------------+--------------------
             | 0.7998745861323613 | 0.9776304992484732
    (1 row)
    
    
    postgres=# 
    postgres=# SELECT 
    postgres-#   setseed(0.8),
    postgres-#   random(), 
    postgres-#   random();
     setseed |       random       |       random       
    ---------+--------------------+--------------------
             | 0.7998745861323613 | 0.9776304992484732
    (1 row)

    Seteed()を使用しない例

    setseed()を使用せずに、両方のステートメントを再度実行すると、次のようになります。 機能。

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

    結果:

    postgres=# SELECT 
    postgres-#   random(), 
    postgres-#   random();
           random       |       random       
    --------------------+--------------------
     0.8789931563830109 | 0.8981750563441189
    (1 row)
    
    
    postgres=# 
    postgres=# SELECT 
    postgres-#   random(), 
    postgres-#   random();
           random       |      random       
    --------------------+-------------------
     0.3630186384623926 | 0.909389353037664
    (1 row)

    したがって、この場合、2番目のステートメントはまったく新しいランダムな数字のセットを生成しました。


    1. Oracle.DataAccess.dllは存在しますが見つかりません

    2. SQLiteのGROUP_CONCAT

    3. MySQL-SELECTクエリに基づくUPDATEクエリ

    4. PHPコードを使用してMySQLデータベースに画像をアップロードする方法