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 値を設定せずに 3 つの 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
に設定し、さらに 3 つの 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 | +------+
SEED 値を .25
にリセットして、RANDOM が前の 3 つの呼び出しと同じ結果を返すことを検証するには、次の例を使用します。
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 個のアイテムのランダムサンプルを取得するが、料金に比例してアイテムを選択するには、次の例を使用します。例えば、別の料金の 2 倍のアイテムは、クエリ結果に表示される可能性が 2 倍になります。
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 | +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+