宣言
UNIFORM(<min> , <max> , <gen>)
説明
この関数は、一様分布(Uniform Distribution)に従う整数または浮動小数点数を返します。
minおよびmaxの値はスカラー値でなければならず、行の反復によって変化することはありません。例えば、定数やスカラー関数などです。PLでは、@v1、1+@v3なども可能です。- MySQLモードでは、
minまたはmaxがいずれも整数の場合、UNIFORM()関数の出力結果は整数となります。それ以外の場合、UNIFORM()関数の出力結果は浮動小数点数となります。 genは数値生成関数であり、通常はRANDOM()関数を使用して生成されます。渡された値が定数の場合、UNIFORM()関数の戻り値も定数となります。
例
以下の例は、1から10の間の整数を均等に生成します。
obclient> SELECT v, COUNT(*) FROM (SELECT UNIFORM(1, 10, RANDOM()) v FROM TABLE(GENERATOR(1000000))) x GROUP BY v ORDER BY v;
+------+----------+
| v | count(*) |
+------+----------+
| 1 | 100738 |
| 2 | 100119 |
| 3 | 100223 |
| 4 | 99537 |
| 5 | 100125 |
| 6 | 100001 |
| 7 | 100275 |
| 8 | 99235 |
| 9 | 99837 |
| 10 | 99910 |
+------+----------+
10 rows in set
以下の例は、返される結果の型がパラメータの型に関連していることを示しています。
obclient> SELECT UNIFORM(0.0, 10, RANDOM()) FROM TABLE(GENERATOR(4)) ORDER BY 1;
+----------------------------+
| UNIFORM(0.0, 10, RANDOM()) |
+----------------------------+
| 2.3520877625884653 |
| 4.155845987385725 |
| 8.323930497420852 |
| 9.844002748532109 |
+----------------------------+
4 rows in set
obclient> SELECT UNIFORM(0, 10, RANDOM()) FROM TABLE(GENERATOR(4)) ORDER BY 1;
+--------------------------+
| UNIFORM(0, 10, RANDOM()) |
+--------------------------+
| 0 |
| 4 |
| 8 |
| 9 |
+--------------------------+
4 rows in set