MariaDBでは、RAND()
ランダムなDOUBLE
を返す組み込み関数です 高精度浮動小数点値v
0 <= v < 1.0
の範囲 。
構文
RAND()
次の2つの方法で使用できます。
RAND()
RAND(N)
ここでN
シード値として使用される定数整数です。
シード値を使用する場合、RAND()
列値の繰り返し可能なシーケンスを生成します。
例
RAND()
を示す例を次に示します。 シード値を指定せずに:
SELECT RAND();
結果:
+---------------------+ | RAND() | +---------------------+ | 0.14470310708945908 | +---------------------+
例–シードを使用
RAND()
を示す例を次に示します。 with シード値:
SELECT RAND(3);
結果:
+--------------------+ | RAND(3) | +--------------------+ | 0.9057697559760601 | +--------------------+
上記の例を使用した場合、実際には違いがわかりません。違いを確認するには、同じシードを使用して複数の関数呼び出しを行う必要があります。
このように:
SELECT
RAND(3),
RAND(3),
RAND(3);
結果:
+--------------------+--------------------+--------------------+ | RAND(3) | RAND(3) | RAND(3) | +--------------------+--------------------+--------------------+ | 0.9057697559760601 | 0.9057697559760601 | 0.9057697559760601 | +--------------------+--------------------+--------------------+
3つの呼び出しすべてが同じ値になっていることがわかります。
シード値を省略すると、次のようになります。
SELECT
RAND(),
RAND(),
RAND();
結果:
+--------------------+---------------------+---------------------+ | RAND() | RAND() | RAND() | +--------------------+---------------------+---------------------+ | 0.7037061310407763 | 0.08442136466914915 | 0.31098846095706195 | +--------------------+---------------------+---------------------+
呼び出しごとに異なる値が返されます。
範囲内のランダム整数
RAND()
を組み合わせることができます FLOOR()
を使用 、いくつかの計算とともに、範囲内のランダムな整数を返します。
これを行うための構文は次のようになります:
FLOOR(min_value + RAND() * (max_value - min_value +1))
したがって、次のようにして1〜10のランダムな整数を返すことができます。
SELECT FLOOR(1 + RAND() * (10 - 1 +1));
結果:
+---------------------------------+ | FLOOR(1 + RAND() * (10 - 1 +1)) | +---------------------------------+ | 6 | +---------------------------------+
ランダム効果を確認するために、もう少し呼びましょう:
SELECT
FLOOR(1 + RAND() * (10 - 1 +1)) AS r1,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r2,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r3,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r4,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r5,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r6,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r7,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r8;
結果:
+----+----+----+----+----+----+----+----+ | r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 | +----+----+----+----+----+----+----+----+ | 3 | 6 | 10 | 4 | 6 | 10 | 1 | 6 | +----+----+----+----+----+----+----+----+
テーブルからランダムな行を返す
RAND()
ORDER BY
と組み合わせて使用できます 句とLIMIT
データベーステーブルからランダムな行を返すキーワード:
SELECT
PetId,
PetName
FROM Pets
ORDER BY RAND()
LIMIT 5;
結果の例:
+-------+---------+ | PetId | PetName | +-------+---------+ | 5 | Tweet | | 7 | Bark | | 1 | Fluffy | | 8 | Meow | | 3 | Scratch | +-------+---------+
そして、もう一度実行すると、次のようになります:
+-------+---------+ | PetId | PetName | +-------+---------+ | 3 | Scratch | | 8 | Meow | | 4 | Wag | | 7 | Bark | | 6 | Fluffy | +-------+---------+
など…
ただし、これは非常に集中的であり、大きなテーブルでは使用しないでください。より大きなテーブルにより適した手法については、MariaDB Webサイトの「データサンプリング:ランダムな行を効率的に見つけるための手法」を参照してください。
非数値シード
数値以外のシード値を指定するとどうなるかの例を次に示します。
SELECT RAND('five');
結果:
+---------------------+ | RAND('five') | +---------------------+ | 0.15522042769493574 | +---------------------+ 1 row in set, 1 warning (0.000 sec)
警告を見てみましょう:
SHOW WARNINGS;
結果:
+---------+------+-------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: 'five' | +---------+------+-------------------------------------------+
また、これは、使用されている非数値シードに関係なく、同じ結果を返す傾向があります。たとえば、異なる非数値シードをスローすると、同じ結果が得られます:
SELECT
RAND('one'),
RAND('two'),
RAND('three');
結果:
+---------------------+---------------------+---------------------+ | RAND('one') | RAND('two') | RAND('three') | +---------------------+---------------------+---------------------+ | 0.15522042769493574 | 0.15522042769493574 | 0.15522042769493574 | +---------------------+---------------------+---------------------+ 1 row in set, 3 warnings (0.000 sec)
警告を確認してください:
SHOW WARNINGS;
結果:
+---------+------+--------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: 'one' | | Warning | 1292 | Truncated incorrect INTEGER value: 'two' | | Warning | 1292 | Truncated incorrect INTEGER value: 'three' | +---------+------+--------------------------------------------+
ヌル引数
RAND()
シードがnull
の場合、同じ値を返します :
SELECT
RAND(null),
RAND(null),
RAND(null);
結果:
+---------------------+---------------------+---------------------+ | RAND(null) | RAND(null) | RAND(null) | +---------------------+---------------------+---------------------+ | 0.15522042769493574 | 0.15522042769493574 | 0.15522042769493574 | +---------------------+---------------------+---------------------+
ただし、この場合、警告はありません。
引数が多すぎます
RAND()
の呼び出し 引数が多すぎるとエラーになります:
SELECT RAND(1, 2);
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'RAND'