資料庫

MySQL/MariaDB 資料庫 RAND 產生隨機亂數教學與範例

介紹如何在 MySQL/MariaDB 資料庫中使用 RAND 函數產生亂數,並用於隨機抽樣選取資料。

建立測試用資料

為了示範 RAND 函數的使用方式,我們先建立測試用的 products 資料表:

-- 建立 products 資料表
CREATE TABLE products (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(255),
  price INT UNSIGNED,
  PRIMARY KEY (id)
);

新增一些測試用的資料:

-- 新增資料
INSERT INTO products (name, price) VALUES
  ("A031", 320), ("C001", 420), ("B021", 280),
  ("Y158", 690), ("A202", 195), ("D022", 540);

顯示所有資料:

-- 顯示所有資料
SELECT * FROM products;
+----+------+-------+
| id | name | price |
+----+------+-------+
|  1 | A031 |   320 |
|  2 | C001 |   420 |
|  3 | B021 |   280 |
|  4 | Y158 |   690 |
|  5 | A202 |   195 |
|  6 | D022 |   540 |
+----+------+-------+

RAND 產生亂數

RAND 函數可以用來產生介於 01 之間的隨機亂數:

-- 產生介於 0 與 1 之間的亂數
SELECT RAND();
+--------------------+
| RAND()             |
+--------------------+
| 0.7121299539805669 |
+--------------------+

亂數種子

RAND 的參數可用來指定亂數種子,相同的亂數種子就會產生相同的亂數結果(在程式開發與測試階段很有用):

-- 指定亂數種子
SELECT RAND(3);
+--------------------+
| RAND(3)            |
+--------------------+
| 0.9057697559760601 |
+--------------------+

整數亂數

若要產生整數亂數,可以搭配 FLOOR 函數使用:

-- 產生大於或等於 5 且小於或等於 10 的整數亂數
SELECT FLOOR(RAND() * (10 - 5 + 1) + 5);
+----------------------------------+
| FLOOR(RAND() * (10 - 5 + 1) + 5) |
+----------------------------------+
|                                8 |
+----------------------------------+

亂數欄位

若希望在每一筆資料上自動加上一欄亂數欄位,可以這樣寫:

-- 讓資料加上亂數欄位
SELECT id, name, RAND() FROM products;
+----+------+---------------------+
| id | name | RAND()              |
+----+------+---------------------+
|  1 | A031 |  0.3601633034275503 |
|  2 | C001 | 0.18889325315960986 |
|  3 | B021 |  0.8639763862490434 |
|  4 | Y158 |  0.7532022025000324 |
|  5 | A202 | 0.17408188448667702 |
|  6 | D022 |  0.6108028456669328 |
+----+------+---------------------+

隨機排序資料

RAND 函數可用來將資料的順序打亂:

-- 隨機排序資料
SELECT * FROM products ORDER BY RAND();
+----+------+-------+
| id | name | price |
+----+------+-------+
|  4 | Y158 |   690 |
|  1 | A031 |   320 |
|  6 | D022 |   540 |
|  3 | B021 |   280 |
|  5 | A202 |   195 |
|  2 | C001 |   420 |
+----+------+-------+

隨機抽樣資料

將資料的順序打亂之後,只要加上 LIMIT 的限制,就可以用來進行隨機抽樣,自動以亂數挑選指定的樣本數:

-- 隨機抽樣 3 筆資料
SELECT * FROM products ORDER BY RAND() LIMIT 3;
+----+------+-------+
| id | name | price |
+----+------+-------+
|  5 | A202 |   195 |
|  6 | D022 |   540 |
|  1 | A031 |   320 |
+----+------+-------+

參考資料:MySQL 官方文件

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

10 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

10 個月 ago