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

MySQL에서 특정 열 값을 고정하고 나머지 행은 랜덤으로 정렬하는 방법

MySQL에서 특정 행의 값을 항상 상단에 고정하고, 나머지 행들은 무작위(랜덤) 순서로 표시하고 싶다면 RAND() 함수와 ORDER BY 절을 함께 활용하면 됩니다.

테이블 생성하기

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

mysql> create table DemoTable1921
   (
   Number int
   );
Query OK, 0 rows affected (0.00 sec)

데이터 삽입하기

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable1921 values(40);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1921 values(80);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1921 values(820);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1921 values(10);
Query OK, 1 row affected (0.00 sec)

저장된 데이터 확인하기

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

mysql> select * from DemoTable1921;

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

+--------+
| Number |
+--------+
|     40 |
|     80 |
|    820 |
|     10 |
+--------+
4 rows in set (0.00 sec)

특정 값 고정 후 나머지 행 랜덤 정렬 쿼리

아래 쿼리는 Number가 40인 행을 항상 맨 위에 고정하고, 나머지 행들은 RAND()를 이용해 무작위 순서로 출력합니다.

mysql> select * from DemoTable1921
   order by (Number=40)desc,rand();

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

+--------+
| Number |
+--------+
|     40 |
|    820 |
|     10 |
|     80 |
+--------+
4 rows in set (0.00 sec)

쿼리 동작 원리

이 쿼리가 작동하는 방식은 다음과 같습니다.

(Number=40) 조건은 해당 행에 대해서는 1, 그 외에는 0을 반환합니다. 이를 DESC로 내림차순 정렬하면 값이 40인 행이 항상 가장 앞에 위치하게 됩니다. 이후 두 번째 정렬 기준인 RAND()가 나머지 행들의 순서를 매번 실행할 때마다 무작위로 섞어 줍니다.

따라서 쿼리를 반복 실행하면 첫 번째 행은 계속 40으로 유지되지만, 나머지 행들(820, 10, 80)의 순서는 실행할 때마다 달라지는 것을 확인할 수 있습니다.