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

MySQL에서 ORDER BY FIELD()로 사용자 정의 정렬 구현하기

MySQL에서 원하는 순서대로 데이터를 정렬하려면 ORDER BY FIELD() 함수를 활용하면 됩니다. 일반적인 오름차순(ASC)이나 내림차순(DESC) 정렬과 달리, FIELD() 함수를 사용하면 개발자가 직접 지정한 임의의 순서대로 결과를 정렬할 수 있습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
-> (
-> Id int
-> );
Query OK, 0 rows affected (0.82 sec)

2. 데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 입력합니다.

mysql> insert into DemoTable values(101);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(103);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(102);
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values(105);
Query OK, 1 row affected (0.14 sec)

3. 전체 레코드 조회

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

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+------+
| Id |
+------+
| 101 |
| 103 |
| 102 |
| 105 |
+------+
4 rows in set (0.00 sec)

4. FIELD() 함수로 사용자 정의 정렬 수행

이제 FIELD() 함수를 사용해 원하는 순서(102 → 105 → 101 → 103)대로 정렬하는 쿼리를 실행해 보겠습니다.

mysql> select *from DemoTable order by field(Id,102,105,101,103);

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

+------+
| Id |
+------+
| 102 |
| 105 |
| 101 |
| 103 |
+------+
4 rows in set (0.00 sec)

FIELD() 함수 동작 원리

FIELD(Id, 102, 105, 101, 103)는 각 행의 Id 값이 두 번째 인수 목록 중 어느 위치에 해당하는지를 숫자로 반환합니다. 예를 들어 Id가 102면 1, 105면 2, 101이면 3, 103이면 4를 반환하며, ORDER BY는 이 반환값을 기준으로 오름차순 정렬을 수행합니다.

참고 사항

FIELD() 함수의 값 목록에 포함되지 않은 값은 0을 반환하므로, 목록에 없는 레코드들은 가장 앞쪽에 정렬됩니다. 만약 이러한 레코드를 맨 뒤로 보내고 싶다면 ORDER BY FIELD(Id, 102, 105, 101, 103) DESC처럼 DESC를 붙이거나, CASE 문을 조합하는 방법도 고려할 수 있습니다.