Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장 프로시저에서 5개의 난수를 생성하는 방법

MySQL 저장 프로시저로 난수 5개 생성하기

MySQL에서 난수를 생성하려면 ORDER BY RAND() 함수를 활용하면 됩니다. 이번 글에서는 저장 프로시저 안에서 특정 범위의 값 중 5개를 무작위로 추출하는 방법을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable (Value int);
Query OK, 0 rows affected (0.76 sec)

2단계: 샘플 데이터 삽입

INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable values(89);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(98);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values(78);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(75);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(76);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(74);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(99);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(101);
Query OK, 1 row affected (0.15 sec)

3단계: 전체 데이터 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+-------+
| Value |
+-------+
| 89 |
| 98 |
| 10 |
| 78 |
| 75 |
| 76 |
| 74 |
| 99 |
| 101 |
+-------+
9 rows in set (0.00 sec)

4단계: 저장 프로시저 생성

다음은 10 이상 100 이하 범위의 값 중에서 5개의 숫자를 무작위로 선택한 뒤, 오름차순으로 정렬하여 슬래시(/) 구분자로 연결해 출력하는 저장 프로시저입니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE generate_Random5Numbers()
   BEGIN
      SELECT GROUP_CONCAT(Value SEPARATOR '/')
      FROM ( SELECT Value
        FROM ( SELECT Value
          FROM DemoTable
          WHERE Value BETWEEN 10 AND 100
        ORDER BY RAND()
        LIMIT 5) Ascending_Order
      ORDER BY Value) 5Values;
   END
   //
Query OK, 0 rows affected (0.31 sec)
mysql> DELIMITER ;

5단계: 저장 프로시저 호출

CALL 명령어를 사용해 생성한 저장 프로시저를 실행합니다.

mysql> call generate_Random5Numbers();

실행 결과는 다음과 같습니다.

+-----------------------------------+
| GROUP_CONCAT(Value SEPARATOR '/') |
+-----------------------------------+
| 89/74/78/99/10 |
+-----------------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.02 sec)

동작 원리 정리

이 프로시저는 세 단계의 서브쿼리로 구성되어 있습니다. 가장 안쪽 쿼리는 BETWEEN 10 AND 100 조건으로 범위 내 값을 필터링하고, ORDER BY RAND()LIMIT 5를 통해 무작위로 5개의 행을 추출합니다. 중간 쿼리는 추출된 결과를 오름차순으로 정렬하며, 바깥쪽 쿼리는 GROUP_CONCAT 함수로 값을 하나의 문자열로 합쳐 출력합니다. 참고로 RAND() 함수의 특성상 프로시저를 실행할 때마다 결과 조합은 매번 달라집니다.