RANDOM 函數 - Amazon Redshift

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

RANDOM 函數

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

語法

RANDOM()

傳回類型

DOUBLE PRECISION

使用須知

SET 命令設定種子值之後呼叫 RANDOM,讓 RANDOM 以可預測的序列產生數字。

範例

若要計算 0 到 99 之間的隨機值,請使用下列範例。如果隨機數字為 0 到 1,此查詢會產生 0 到 100 的隨機數字。

SELECT CAST(RANDOM() * 100 AS INT); +------+ | int4 | +------+ | 59 | +------+

此範例會使用 SET 命令設定 SEED 值,讓 RANDOM 產生可預測的數字序列。

若要在不設定 SEED 值的情況下傳回三個 RANDOM 整數,請使用下列範例。

SELECT CAST(RANDOM() * 100 AS INT); +------+ | int4 | +------+ | 6 | +------+ SELECT CAST(RANDOM() * 100 AS INT); +------+ | int4 | +------+ | 68 | +------+ SELECT CAST(RANDOM() * 100 AS INT); +------+ | int4 | +------+ | 56 | +------+

若要將 SEED 值設定為 .25,並傳回三個以上的亂數,請使用下列範例。

SET SEED TO .25; SELECT CAST(RANDOM() * 100 AS INT); +------+ | int4 | +------+ | 21 | +------+ SELECT CAST(RANDOM() * 100 AS INT); +------+ | int4 | +------+ | 79 | +------+ SELECT CAST(RANDOM() * 100 AS INT); +------+ | int4 | +------+ | 12 | +------+

若要將 SEED 值重設為 .25,並驗證 RANDOM 是否傳回與前三個呼叫相同的結果,請使用下列範例。

SET SEED TO .25; SELECT CAST(RANDOM() * 100 AS INT); +------+ | int4 | +------+ | 21 | +------+ SELECT CAST(RANDOM() * 100 AS INT); +------+ | int4 | +------+ | 79 | +------+ SELECT CAST(RANDOM() * 100 AS INT); +------+ | int4 | +------+ | 12 | +------+

下列範例使用 TICKIT 範例資料庫。如需詳細資訊,請參閱 範本資料庫

若要從 SALES 表格擷取 10 個項目的統一隨機樣本,請使用下列範例。

SELECT * FROM sales ORDER BY RANDOM() LIMIT 10; +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+ | salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime | +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+ | 45422 | 51114 | 5983 | 24482 | 4369 | 2118 | 1 | 195 | 29.25 | 2008-10-19 05:20:07 | | 42481 | 47638 | 4573 | 6198 | 6479 | 1987 | 4 | 1140 | 171 | 2008-06-10 09:39:19 | | 31494 | 34759 | 18895 | 4719 | 7753 | 2090 | 4 | 1024 | 153.6 | 2008-09-21 03:44:26 | | 119388 | 136685 | 21815 | 41905 | 2071 | 1884 | 1 | 359 | 53.85 | 2008-02-27 10:43:10 | | 166990 | 225037 | 18529 | 7628 | 746 | 2113 | 1 | 2009 | 301.35 | 2008-10-14 10:07:44 | | 11146 | 12096 | 42685 | 6619 | 1876 | 2123 | 1 | 29 | 4.35 | 2008-10-24 06:23:54 | | 148537 | 172056 | 15102 | 11787 | 6122 | 1923 | 2 | 480 | 72 | 2008-04-07 03:58:23 | | 68945 | 78387 | 7359 | 18323 | 6636 | 1910 | 1 | 457 | 68.55 | 2008-03-25 08:31:03 | | 52796 | 59576 | 9909 | 15102 | 7958 | 1951 | 1 | 479 | 71.85 | 2008-05-05 02:25:08 | | 90684 | 103522 | 38052 | 21549 | 7384 | 2117 | 1 | 313 | 46.95 | 2008-10-18 05:43:11 | +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+

若要擷取 10 個商品的隨機樣本,但請依價格比例來選擇商品,請使用下列範例。例如,一個商品的價格如果是其他商品的兩倍,則出現在查詢結果的機率也是其他商品的兩倍。

SELECT * FROM sales ORDER BY -LOG(RANDOM()) / pricepaid LIMIT 10; +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+ | salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime | +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+ | 158340 | 208208 | 17082 | 42018 | 1211 | 2160 | 4 | 6852 | 1027.8 | 2008-11-30 12:21:43 | | 53250 | 60069 | 12644 | 7066 | 7942 | 1838 | 4 | 1528 | 229.2 | 2008-01-12 11:24:56 | | 22929 | 24938 | 47314 | 6503 | 179 | 2000 | 3 | 741 | 111.15 | 2008-06-23 08:04:50 | | 164980 | 221181 | 1949 | 19670 | 1471 | 1906 | 1 | 1330 | 199.5 | 2008-03-21 07:59:51 | | 159641 | 211179 | 44897 | 16652 | 7458 | 2128 | 1 | 1019 | 152.85 | 2008-10-29 02:02:15 | | 73143 | 83439 | 5716 | 5727 | 7314 | 1903 | 1 | 248 | 37.2 | 2008-03-18 11:07:42 | | 84778 | 96749 | 46608 | 32980 | 3883 | 1999 | 2 | 958 | 143.7 | 2008-06-22 12:13:31 | | 171096 | 232929 | 43683 | 8536 | 8353 | 1870 | 1 | 929 | 139.35 | 2008-02-13 01:36:36 | | 74212 | 84697 | 39809 | 15569 | 5525 | 2105 | 2 | 896 | 134.4 | 2008-10-06 11:47:50 | | 158011 | 207556 | 25399 | 16881 | 232 | 2088 | 2 | 2526 | 378.9 | 2008-09-19 06:00:26 | +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+