DB/MySQL

임의의 숫자 데이터 다루기 ; RAND()

채윤아빠 2021. 4. 7. 22:22
728x90
반응형

MariaDB에서 임의의 숫자를 얻기 위하여 RAND() 혹은 RAND(N) 함수를 이용합니다.

RAND() 함수를 호출하면 0과 1사이의 임의의 실수를 반환합니다. 따라서 특정 숫자 사이의 정수를 구하려면 다음과 같이 FLOOR() 함수를 이용해야 합니다.

FLOOR(min_value + RAND() * (max_value - min_value + 1))

5에서 15 사이의 정수를 얻으려면 다음과 같이 호출합니다.

SELECT FLOOR(5 + RAND() * 11);

RAND(N)에서 N값은 초기화(seed)값으로, 동일한 초기화값을 입력할 경우 동일 임의의 숫자 셋을 순차적으로 얻을 수 있습니다.

CREATE TABLE t (i INT);

INSERT INTO t VALUES(1),(2),(3);

SELECT i, RAND() FROM t;
+------+-------------------+
| i    | RAND()            |
+------+-------------------+
|    1 | 0.255651095188829 |
|    2 | 0.833920199269355 |
|    3 |  0.40264774151393 |
+------+-------------------+

SELECT i, RAND(3) FROM t;
+------+-------------------+
| i    | RAND(3)           |
+------+-------------------+
|    1 |  0.90576975597606 |
|    2 | 0.373079058130345 |
|    3 | 0.148086053457191 |
+------+-------------------+

-- 다른 세션에서 수행
SELECT i, RAND() FROM t;
+------+-------------------+
| i    | RAND()            |
+------+-------------------+
|    1 | 0.511478140495232 |
|    2 | 0.349447508668012 |
|    3 | 0.212803152588013 |
+------+-------------------+

SELECT i, RAND(3) FROM t;
+------+-------------------+
| i    | RAND(3)           |
+------+-------------------+
|    1 |  0.90576975597606 |
|    2 | 0.373079058130345 |
|    3 | 0.148086053457191 |
+------+-------------------+

RAND(N) 형태로 초기값을 주어서 호출하면, 호출시 반환되는 실수가 위와 같이 동일한 값들이 반환됩니다. 임의의 값이 아니므로 일반적으로 사용하지 않지만, 동일한 임의의 숫자들을 이용하 시험 등을 하려는 상황에서는 아주 유용합니다.
만약, 초기화(seed) 값을 설정할 수 없는 상황이라면, 임시 테이블을 만들고 임시 테이블에 임의의 실수를 채운 다음에 동일한 임시 테이블을 반복적으로 이용하면 동일한 결과를 얻을 수 있습니다.


참고 : https://mariadb.com/kb/en/rand/