

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# RANDOM 函數
<a name="RANDOM"></a>

RANDOM 函數會產生介於 0.0 (包含) 到 1.0 (不包含) 間的隨機值。

## 語法
<a name="RANDOM-synopsis"></a>

```
RANDOM()
```

## 傳回類型
<a name="RANDOM-return-type"></a>

RANDOM 傳回 DOUBLE PRECISION 數字。

## 範例
<a name="RANDOM-examples"></a>

1. 計算介於 0 和 99 之間的隨機值。如果隨機數字為 0 到 1，此查詢會產生 0 到 100 的隨機數字：

   ```
   select cast (random() * 100 as int);
   
   INTEGER
   ------
   24
   (1 row)
   ```

1. 擷取 10 個商品的均勻隨機樣本：

   ```
   select * 
   from sales
   order by random()
   limit 10;
   ```

   現在擷取 10 個商品的隨機樣本，但請依價格比例來選擇商品。例如，一個商品的價格如果是其他商品的兩倍，則出現在查詢結果的機率也是其他商品的兩倍：

   ```
   select * 
   from sales
   order by log(1 - random()) / pricepaid
   limit 10;
   ```

1. 此範例使用 SET 命令來設定 SEED 值，以便 RANDOM 產生可預測的數字序列。

   首先傳回三個 RANDOM 整數，但不先設定 SEED 值：

   ```
   select cast (random() * 100 as int);
   INTEGER
   ------
   6
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   68
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   56
   (1 row)
   ```

   現在，將 SEED 值設為 `.25`，並傳回三個以上的 RANDOM 數字：

   ```
   set seed to .25;
   select cast (random() * 100 as int);
   INTEGER
   ------
   21
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   79
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   12
   (1 row)
   ```

   最後，將 SEED 值重設為 `.25`，並驗證 RANDOM 是否傳回與前三個呼叫相同的結果：

   ```
   set seed to .25;
   select cast (random() * 100 as int);
   INTEGER
   ------
   21
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   79
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   12
   (1 row)
   ```