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

MySQL에서 임의의 키워드 순서대로 정렬하는 방법 – ORDER BY FIELD() 활용하기

MySQL에서 데이터를 정렬할 때 일반적인 ORDER BY 절은 오름차순(ASC) 또는 내림차순(DESC)으로만 정렬할 수 있습니다. 하지만 실무에서는 특정 값들을 개발자가 원하는 순서대로 직접 지정해서 정렬해야 하는 경우가 자주 발생합니다. 이럴 때 유용하게 사용할 수 있는 것이 바로 FIELD() 함수입니다.

1. 예제 테이블 생성

먼저 데모용 테이블을 생성합니다.

mysql> create table DemoTable(Title varchar(100));
Query OK, 0 rows affected (0.56 sec)

2. 데이터 삽입

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

mysql> insert into DemoTable values('Java');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('C');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Python');
Query OK, 1 row affected (0.63 sec)
mysql> insert into DemoTable values('MongoDB');
Query OK, 1 row affected (0.20 sec)

3. 전체 레코드 조회

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

mysql> select *from DemoTable;

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

+---------+
| Title   |
+---------+
| Java    |
| C       |
| Python  |
| MongoDB |
+---------+
4 rows in set (0.00 sec)

4. FIELD() 함수로 원하는 순서 지정하기

다음 쿼리는 Title 컬럼의 값을 'MongoDB' → 'C' → 'Python' → 'Java' 순서대로 정렬합니다.

mysql> select *from DemoTable
    -> order by FIELD(Title,'MongoDB','C','Python','Java') ASC;

실행 결과:

+---------+
| Title   |
+---------+
| MongoDB |
| C       |
| Python  |
| Java    |
+---------+
4 rows in set (0.00 sec)

FIELD() 함수의 동작 원리

FIELD(기준값, 값1, 값2, ...) 형태로 사용하며, 첫 번째 인자가 뒤에 나열된 값들 중 몇 번째 위치에 해당하는지를 숫자로 반환합니다. 예를 들어 Title이 'C'라면 FIELD()는 2를 반환하므로, ASC 정렬 시 두 번째에 배치됩니다.

주의할 점은 각 키워드를 반드시 별도의 문자열 인자로 구분해서 전달해야 한다는 것입니다. 만약 'MongoDB,C,Python,Java'처럼 하나의 문자열로 묶어 전달하면 어떤 행도 일치하지 않아 모든 행이 0을 반환하게 되고, 의도한 대로 정렬되지 않습니다.

또한 목록에 포함되지 않은 값은 0을 반환하므로 ASC 정렬 시 가장 앞에 오고, DESC를 사용하면 맨 뒤에 배치됩니다. 이러한 특성을 활용하면 우선순위가 있는 항목을 상단 또는 하단에 고정하는 등 다양한 정렬 요구사항을 손쉽게 처리할 수 있습니다.