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

MySQL에서 임의 값 열을 활용해 레코드를 무작위로 정렬하는 방법

MySQL에서 RAND() 함수를 활용하면 테이블의 레코드를 무작위로 정렬할 수 있습니다. 이번 글에서는 새로운 임의 값(random) 열을 만들고, 그 값을 기준으로 레코드를 무작위로 정렬하는 과정을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다. 아래 쿼리는 학생 정보를 저장하는 DemoTable을 만드는 예시입니다.

mysql> create table DemoTable
(
   StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   StudentName varchar(20)
);
Query OK, 0 rows affected (0.57 sec)

2. 샘플 데이터 삽입하기

다음으로 INSERT 명령을 사용해 테이블에 여러 개의 레코드를 삽입합니다.

mysql> insert into DemoTable(StudentName) values('Larry');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentName) values('Sam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(StudentName) values('Mike');
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable(StudentName) values('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentName) values('Robert');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(StudentName) values('Chris');
Query OK, 1 row affected (0.14 sec)

3. 저장된 레코드 확인하기

SELECT 문을 사용해 테이블에 저장된 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|         1 | Larry       |
|         2 | Sam         |
|         3 | Mike        |
|         4 | Carol       |
|         5 | Robert      |
|         6 | Chris       |  
+-----------+-------------+
6 rows in set (0.00 sec)

4. 임의 값 열을 기준으로 무작위 정렬하기

이제 서브쿼리 안에서 RAND()+1을 사용해 새로운 임의 값 열(randomRecord)을 생성하고, 해당 열을 기준으로 내림차순 정렬하는 쿼리를 실행합니다.

mysql> SELECT *
FROM (SELECT StudentName, RAND()+1 AS randomRecord
FROM DemoTable
) tbl
ORDER BY RandomRecord DESC;

실행 결과는 다음과 같습니다. 매번 쿼리를 실행할 때마다 임의 값이 새로 계산되므로 정렬 순서도 달라지는 것을 확인할 수 있습니다.

+-------------+--------------------+
| StudentName | RandomRecord       |
+-------------+--------------------+
| Carol | 1.8973721451101566 |
| Chris | 1.7821308670399065 |
| Mike | 1.4640037673190271 |
| Larry | 1.4134691557041081 |
| Sam | 1.1408822407395414 |
| Robert | 1.0948494543273461 |
+-------------+--------------------+
6 rows in set (0.00 sec)

정리

이처럼 MySQL에서는 서브쿼리와 RAND() 함수를 조합해 임의 값 열을 만들고, 이를 ORDER BY 절에 적용함으로써 레코드를 손쉽게 무작위로 정렬할 수 있습니다. 참고로 단순히 무작위 정렬만 필요하다면 ORDER BY RAND()를 바로 사용해도 되지만, 임의 값을 별도의 열로 확인해야 하는 경우에는 위 예시처럼 서브쿼리를 활용하는 방식이 유용합니다.