MySQL에서 특정 필드 값을 기준으로 사용자 지정 정렬을 수행하려면 ORDER BY 절과 함께 FIELD() 함수를 사용하면 됩니다. FIELD() 함수는 첫 번째 인자가 이후에 나열된 값들 중 몇 번째 위치에 해당하는지를 반환하며, 이를 활용하면 원하는 임의의 순서대로 조회 결과를 정렬할 수 있습니다.
예제 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable (StudentId int);
Query OK, 0 rows affected (0.58 sec)
테이블에 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable values(100);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(110);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(90);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(70);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(120);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(140);
Query OK, 1 row affected (0.14 sec)
저장된 레코드 조회하기
SELECT 명령으로 테이블에 저장된 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+
| StudentId |
+-----------+
| 100 |
| 110 |
| 90 |
| 70 |
| 120 |
| 140 |
+-----------+
6 rows in set (0.00 sec)
FIELD() 함수로 사용자 지정 정렬 적용하기
이제 FIELD() 함수를 활용하여 원하는 순서대로 정렬하는 쿼리를 실행해 보겠습니다.
mysql> select *from DemoTable order by field(StudentId,'100','70','140','90','120','110');
실행 결과는 다음과 같습니다.
+-----------+
| StudentId |
+-----------+
| 100 |
| 70 |
| 140 |
| 90 |
| 120 |
| 110 |
+-----------+
6 rows in set (0.00 sec)
출력 결과를 보면 StudentId가 100 → 70 → 140 → 90 → 120 → 110 순서로 정렬된 것을 확인할 수 있습니다. FIELD() 함수는 두 번째 인자부터 나열된 값 목록에서 첫 번째 인자와 일치하는 값의 위치(인덱스)를 반환하며, 일치하는 값이 없으면 0을 반환합니다. 따라서 목록에 포함되지 않은 행은 정렬 시 가장 앞쪽에 배치되므로, 이 점을 고려하여 쿼리를 작성하는 것이 좋습니다.