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

MySQL에서 특정 목록의 값 중 난수를 선택하는 방법

MySQL ELT()와 RAND() 함수로 목록에서 무작위 값 추출하기

MySQL에서 미리 정의된 특정 값 목록 중 하나를 무작위로 선택하고 싶다면 ELT() 함수와 RAND() 함수를 함께 사용하면 됩니다. 이 조합은 간단하면서도 효과적으로 원하는 결과를 얻을 수 있습니다.

기본 문법

ELT(N, value1, value2, ...) 함수는 N번째 위치에 해당하는 값을 반환합니다. 여기에 RAND()를 곱해 인덱스를 무작위로 만들면 목록에서 임의의 값이 선택됩니다.

mysql> SELECT ELT(FLOOR(RAND() * 10) + 1,
   100,200,300,400,500,600,700,800,900,1000) AS random_value_from_listOfValues;

위 쿼리는 100부터 1000까지 열 개의 값 중 하나를 무작위로 반환합니다. 실행 결과는 다음과 같습니다.

+--------------------------------+
| random_value_from_listOfValues |
+--------------------------------+
| 1000 |
+--------------------------------+
1 row in set (0.00 sec)

쿼리 재실행 시 결과 확인

같은 쿼리를 다시 실행해 보겠습니다.

mysql> SELECT ELT(FLOOR(RAND() * 10) + 1,
   100,200,300,400,500,600,700,800,900,1000) AS random_value_from_listOfValues;

이번에는 위와 다른 결과가 출력됩니다. RAND()가 매번 새로운 무작위 숫자를 생성하기 때문입니다.

+--------------------------------+
| random_value_from_listOfValues |
+--------------------------------+
| 400 |
+--------------------------------+
1 row in set (0.00 sec)

동작 원리

  • RAND(): 0 이상 1 미만의 무작위 실수를 반환합니다.
  • FLOOR(RAND() * 10) + 1: 1부터 10 사이의 정수를 생성합니다. 목록의 항목 수가 10개이므로 유효한 인덱스 범위와 일치합니다.
  • ELT(): 계산된 인덱스에 해당하는 위치의 값을 목록에서 꺼내 반환합니다.

목록의 항목 수를 변경할 경우, 곱하는 숫자(예: 10)를 항목 수에 맞게 조정하면 됩니다. 예를 들어 값이 5개라면 FLOOR(RAND() * 5) + 1을 사용하면 됩니다.