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

MySQL FIELD() 함수 완벽 가이드 – 값의 위치 반환과 ORDER BY 활용법

MySQL FIELD() 함수란?

MySQL의 FIELD() 함수는 주어진 값이 값 목록 중 몇 번째 위치(인덱스)에 있는지를 반환하는 함수입니다. 이 함수를 ORDER BY 절과 함께 사용하면 원하는 순서대로 데이터를 정렬할 수 있어 매우 유용합니다.

기본 문법은 다음과 같습니다.

SELECT * FROM yourTableName
ORDER BY field(yourColumnName, yourValue1, yourValue2, yourValue3, yourValue4, .....N) DESC;

예제 테이블 생성하기

문법을 실제로 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table OrderByDemo
-> (
-> StudentId int
-> );
Query OK, 0 rows affected (0.71 sec)

데이터 삽입

INSERT 명령어를 사용해 테이블에 여러 레코드를 삽입합니다.

mysql> insert into OrderByDemo values(101);
Query OK, 1 row affected (0.19 sec)

mysql> insert into OrderByDemo values(1010);
Query OK, 1 row affected (0.56 sec)

mysql> insert into OrderByDemo values(1001);
Query OK, 1 row affected (0.12 sec)

mysql> insert into OrderByDemo values(401);
Query OK, 1 row affected (0.12 sec)

저장된 데이터 확인

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

mysql> select *from OrderByDemo;

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

+-----------+
| StudentId |
+-----------+
| 101 |
| 1010 |
| 1001 |
| 401 |
+-----------+
4 rows in set (0.00 sec)

FIELD() 함수로 원하는 순서대로 정렬하기

이제 FIELD() 함수를 활용해 지정한 값 순서 기준으로 내림차순 정렬을 해보겠습니다. 쿼리는 다음과 같습니다.

mysql> select *from OrderByDemo order by field(StudentId,101,401,1001,1010) desc;

실행 결과는 아래와 같습니다.

+-----------+
| StudentId |
+-----------+
| 1010 |
| 1001 |
| 401 |
| 101 |
+-----------+
4 rows in set (0.00 sec)

정리

FIELD(StudentId, 101, 401, 1001, 1010)는 각 행의 StudentId가 목록에서 몇 번째에 해당하는지를 숫자로 반환합니다. 예를 들어 101은 1, 401은 2, 1001은 3, 1010은 4가 됩니다. 이 값에 DESC를 적용하면 목록의 마지막 값부터 역순으로 정렬되므로 위와 같은 출력 결과를 얻게 됩니다.

참고로 FIELD() 함수에서 일치하는 값이 없으면 0을 반환하며, 오름차순(ASC)으로 정렬하면 지정한 값 순서 그대로 데이터가 나열됩니다. CASE 문 없이도 커스텀 정렬 순서를 간단하게 구현할 수 있다는 점이 FIELD() 함수의 가장 큰 장점입니다.