MySQL에서 쿼리 결과를 정렬할 때 특정 필드의 값을 원하는 순서대로 먼저 배치하고 싶은 경우가 있습니다. 이럴 때 ORDER BY FIELD() 함수를 사용하면 ASC나 DESC 같은 일반적인 정렬 방식 대신, 개발자가 직접 지정한 사용자 정의 순서대로 결과를 정렬할 수 있습니다.
아래에서는 예제 테이블을 생성하고 데이터를 삽입한 뒤, FIELD() 함수를 활용해 색상(Color) 값을 'RED' → 'GREEN' → 'BLUE' → 'ORANGE' 순서로 정렬하는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 아래 쿼리로 간단한 테이블을 만듭니다.
mysql> create table DemoTable849(Color varchar(100)); Query OK, 0 rows affected (0.56 sec)
2. 데이터 삽입하기
INSERT 명령어로 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable849 values('RED');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable849 values('ORANGE');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable849 values('BLUE');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable849 values('GREEN');
Query OK, 1 row affected (0.12 sec)
3. 전체 데이터 조회하기
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable849;
실행 결과는 다음과 같습니다.
+--------+ | Color | +--------+ | RED | | ORANGE | | BLUE | | GREEN | +--------+ 4 rows in set (0.00 sec)
4. ORDER BY FIELD()로 특정 값 우선 정렬하기
FIELD() 함수는 첫 번째 인자로 받은 값이 뒤따르는 인자 목록 중 몇 번째에 해당하는지 그 위치(인덱스)를 반환합니다. 이 함수를 ORDER BY 절에 적용하면 지정한 값의 순서를 그대로 정렬 기준으로 사용할 수 있습니다.
Color 컬럼을 'RED', 'GREEN', 'BLUE', 'ORANGE' 순서로 정렬하는 쿼리는 다음과 같습니다.
mysql> select *from DemoTable849 order by field(Color,'RED','GREEN','BLUE','ORANGE');
실행 결과입니다.
+--------+ | Color | +--------+ | RED | | GREEN | | BLUE | | ORANGE | +--------+ 4 rows in set (0.00 sec)
참고: FIELD() 함수의 동작 방식
- 'RED'는 목록에서 1번째이므로 1을 반환하고, 'GREEN'은 2, 'BLUE'는 3, 'ORANGE'는 4를 반환합니다. 오름차순 정렬 시 이 인덱스 순서대로 출력됩니다.
- 목록에 포함되지 않은 값은 0을 반환하므로, 오름차순 정렬 시 가장 앞에 표시됩니다. 이러한 행을 맨 뒤로 보내려면
ORDER BY FIELD(...) = 0, FIELD(...)형태로 작성하면 됩니다. - FIELD() 함수는 MySQL뿐 아니라 MariaDB에서도 동일하게 사용할 수 있으며, 상태값이나 카테고리처럼 한정된 값의 표시 순서를 제어할 때 매우 유용합니다.