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

MySQL 단일 쿼리에서 GROUP BY와 함께 ORDER BY FIELD를 사용하는 방법

MySQL에서 GROUP BYORDER BY FIELD()를 하나의 쿼리로 결합하면, 그룹화된 결과를 원하는 특정 순서대로 정렬할 수 있습니다. 이 글에서는 예제 테이블을 만들고 데이터를 삽입한 뒤, FIELD() 함수를 활용해 사용자 지정 순서로 정렬하는 방법을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성하기

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

mysql> create table DemoTable
(
    Message text
);
Query OK, 0 rows affected (1.15 sec)

DemoTable이라는 이름의 테이블에 Message라는 TEXT 타입 컬럼이 하나 생성되었습니다.

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('Good');
Query OK, 1 row affected (0.43 sec)
mysql> insert into DemoTable values('Bye');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Awesome');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Bye');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('Good');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('Amazing');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Awesome');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Bye');
Query OK, 1 row affected (0.12 sec)

총 8개의 레코드가 삽입되었으며, 'Good', 'Bye', 'Awesome' 등 일부 값은 중복되어 들어가 있습니다.

3. 테이블 전체 조회하기

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

mysql> select *from DemoTable;

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

+---------+
| Message |
+---------+
| Good    |
| Bye     |
| Awesome |
| Bye     |
| Good    |
| Amazing |
| Awesome |
| Bye     |
+---------+
8 rows in set (0.00 sec)

4. GROUP BY와 ORDER BY FIELD 조합하기

이제 핵심인 단일 쿼리에서 GROUP BY로 중복 값을 그룹화하고, ORDER BY FIELD()로 원하는 순서대로 정렬해 보겠습니다.

mysql> select *from DemoTable
   group by Message
   order by field(Message,'Amazing','Awesome','Good','Bye');

FIELD() 함수는 두 번째 인수부터 나열된 값들 중에서 첫 번째 인수와 일치하는 항목의 위치(인덱스)를 반환합니다. 따라서 위 쿼리는 'Amazing' → 'Awesome' → 'Good' → 'Bye' 순서대로 결과를 정렬합니다.

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

+---------+
| Message |
+---------+
| Amazing |
| Awesome |
| Good    |
| Bye     |
+---------+
4 rows in set (0.04 sec)

정리

GROUP BY가 각 메시지 값을 하나의 그룹으로 묶어 중복을 제거하면, ORDER BY FIELD()가 지정한 순서('Amazing', 'Awesome', 'Good', 'Bye')에 따라 결과를 정렬합니다. 이처럼 FIELD() 함수를 활용하면 알파벳순이나 오름차순/내림차순 같은 기본 정렬 방식이 아닌, 개발자가 직접 정의한 사용자 지정(custom) 순서로 손쉽게 정렬할 수 있다는 점이 큰 장점입니다.