1. ホーム
  2. sql

[解決済み] 1〜10の範囲で乱数を発生させる。

2022-09-05 14:10:45

質問

で取り組んだテストクエリに対する私のアプローチから、このような問題が発生しました。 この質問 で取り組んだテストクエリのための私のアプローチがうまくいかなかったので、私は今他のものを試しています。pgの random() 関数に、1から10までの数字だけを取得するように指示する方法はありますか?

どのように解決するには?

1から10までの数字というのが、>=1かつ<10である任意の浮動小数点数のことであれば、簡単です。

select random() * 9 + 1

で簡単にテストすることができます。

# select min(i), max(i) from (
    select random() * 9 + 1 as i from generate_series(1,1000000)
) q;
       min       |       max
-----------------+------------------
 1.0000083274208 | 9.99999571684748
(1 row)

もし、>=1 と < 10 の整数が欲しいのなら、それは簡単なことです。

select trunc(random() * 9 + 1)

そしてまた、簡単なテストです。

# select min(i), max(i) from (
    select trunc(random() * 9 + 1) as i from generate_series(1,1000000)
) q;
 min | max
-----+-----
   1 |   9
(1 row)