本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
RANDOM 函數
RANDOM 函數會產生介於 0.0 (包含) 到 1.0 (不包含) 間的隨機值。
Syntax (語法)
RANDOM()
傳回類型
RANDOM 傳回 DOUBLE PRECISION 數字。
使用須知
以 SET 命令設定種子值之後呼叫 RANDOM,讓 RANDOM 以可預測的序列產生數字。
範例
-
計算介於 0 和 99 之間的隨機值。如果隨機數字為 0 到 1,此查詢會產生 0 到 100 的隨機數字:
select cast (random() * 100 as int); int4 ------ 24 (1 row)
-
擷取 10 個商品的均勻隨機樣本:
select * from sales order by random() limit 10;
現在擷取 10 個商品的隨機樣本,但請依價格比例來選擇商品。例如,一個商品的價格如果是其他商品的兩倍,則出現在查詢結果的機率也是其他商品的兩倍:
select * from sales order by log(1 - random()) / pricepaid limit 10;
-
此範例會使用 SET 命令設定 SEED 值,讓 RANDOM 產生可預測的數字序列。
首先傳回三個 RANDOM 整數,但不先設定 SEED 值:
select cast (random() * 100 as int); int4 ------ 6 (1 row) select cast (random() * 100 as int); int4 ------ 68 (1 row) select cast (random() * 100 as int); int4 ------ 56 (1 row)
現在,將 SEED 值設為
.25
,並傳回三個以上的 RANDOM 數字:set seed to .25; select cast (random() * 100 as int); int4 ------ 21 (1 row) select cast (random() * 100 as int); int4 ------ 79 (1 row) select cast (random() * 100 as int); int4 ------ 12 (1 row)
最後,將 SEED 值重設為
.25
,並驗證 RANDOM 是否傳回與前三個呼叫相同的結果:set seed to .25; select cast (random() * 100 as int); int4 ------ 21 (1 row) select cast (random() * 100 as int); int4 ------ 79 (1 row) select cast (random() * 100 as int); int4 ------ 12 (1 row)