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

MySQL에서 ORDER BY FIELD()와 OR 조건을 활용한 정렬 방법

개요

MySQL에서는 FIELD() 함수와 OR 조건을 함께 사용하면 특정 값을 원하는 우선순위대로 정렬할 수 있습니다. 이 글에서는 실제 예제를 통해 ORDER BY FIELD()의 활용법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1884
    (
    Marks int
    );
Query OK, 0 rows affected (0.00 sec)

2. 데이터 삽입하기

INSERT 명령어를 사용해 테이블에 샘플 레코드를 추가합니다.

mysql> insert into DemoTable1884 values(55);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1884 values(97);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1884 values(79);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1884 values(87);
Query OK, 1 row affected (0.00 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블에 저장된 전체 레코드를 조회합니다.

mysql> select * from DemoTable1884;

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

+-------+
| Marks |
+-------+
|    55 |
|    97 |
|    79 |
|    87 |
+-------+
4 rows in set (0.00 sec)

4. ORDER BY FIELD()와 OR 조건 함께 사용하기

아래 쿼리는 WHERE 절의 OR 조건과 FIELD() 함수를 결합하여, 지정한 값(98, 87)의 순서대로 결과를 정렬한 뒤 첫 번째 행만 반환합니다.

mysql> select * from DemoTable1884 where Marks = 98 or Marks = 87 order by field(Marks,98,87) limit 1;

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

+-------+
| Marks |
+-------+
|    87 |
+-------+
1 row in set (0.00 sec)

동작 원리 살펴보기

FIELD(Marks, 98, 87) 함수는 첫 번째 인수인 Marks 값이 뒤따르는 목록(98, 87) 중 몇 번째 위치에 해당하는지를 반환합니다. 즉, 98이면 1, 87이면 2를 반환하며 목록에 없는 값은 0을 반환합니다. 따라서 ORDER BY 절에 이 함수를 사용하면 98 → 87 순서로 정렬됩니다.

예제에서는 Marks가 98인 레코드가 테이블에 존재하지 않으므로, OR 조건에 일치하는 유일한 값인 87이 결과로 반환된 것입니다. 만약 98에 해당하는 데이터가 있다면 그 값이 먼저 출력되며, LIMIT 1은 정렬된 결과 중 최상위 한 건만 가져오도록 제한하는 역할을 합니다.

마무리

이처럼 ORDER BY FIELD()를 활용하면 CASE WHEN 문을 별도로 작성하지 않고도 사용자 지정 우선순위에 따라 간단하게 정렬할 수 있습니다. 특정 상태값이나 카테고리를 원하는 순서대로 조회해야 할 때 유용하게 사용할 수 있는 기법이니 참고해 보시기 바랍니다.