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

MySQL ORDER BY FIELD()로 특정 값 우선 정렬하는 방법

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에서도 동일하게 사용할 수 있으며, 상태값이나 카테고리처럼 한정된 값의 표시 순서를 제어할 때 매우 유용합니다.