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

SQLite Random()のしくみ

    SQLite random() 関数は、-9223372036854775808と+9223372036854775807の間の疑似乱数整数を返します。

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

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

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

    SELECT random();

    結果:

    -882536775989953141

    正の値のみ

    random()を組み合わせることができます abs()を使用 正の値のみを生成します。

    SELECT abs(random());

    この場合、random()の場合 負の値abs()を生成します 代わりに絶対値を返します。

    abs()の方法を示すため 動作します。最初の例の(負の)ランダムな数値をabs()に渡すとどうなりますか。 機能:

    SELECT abs(-882536775989953141);

    結果:

    882536775989953141

    したがって、random()を渡すと abs()へ 、およびrandom() 負の値abs()を生成します その値を正の値として返します。

    0から100までの値

    0〜100の正の数を生成する例を次に示します。

    SELECT abs(random() % 100);

    複数のランダムな値を選択する例を次に示します。

    SELECT 
      abs(random() % 100) AS R1,
      abs(random() % 100) AS R2,
      abs(random() % 100) AS R3;

    結果:

    R1          R2          R3        
    ----------  ----------  ----------
    17          79          90        

    ランダム行を返す

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

    これが例です。

    SELECT * FROM Artist 
    ORDER BY random() LIMIT 5;

    結果:

    ArtistId    Name                                    
    ----------  ----------------------------------------
    131         Smashing Pumpkins                       
    127         Red Hot Chili Peppers                   
    169         Black Eyed Peas                         
    60          Santana Feat. Dave Matthews             
    240         Gustav Mahler                           

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

    ArtistId    Name                                    
    ----------  ----------------------------------------
    234         Orchestra of The Age of Enlightenment   
    126         Raul Seixas                             
    76          Creedence Clearwater Revival            
    182         Nega Gizza                              
    63          Santana Feat. Lauryn Hill & Cee-Lo      

    テーブルが大きい場合は、クエリを次のように変更することをお勧めします。

    SELECT * FROM Artist 
    WHERE ArtistId IN 
      (SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);

    結果:

    ArtistId    Name                                    
    ----------  ----------------------------------------
    45          Sandra De Sá                            
    105         Men At Work                             
    110         Nirvana                                 
    205         Chris Cornell                           
    267         Göteborgs Symfoniker & Neeme Järvi     

    1. 悪名高いjava.sql.SQLException:適切なドライバーが見つかりません

    2. MySQL警告1287を修正:「BINARYexpr」は非推奨であり、将来のリリースで削除される予定です

    3. MYSQLの条件による一意性制約

    4. パート2:MariaDBサーバーとTensorFlowを使用した画像分類–チュートリアル