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

MySQL에서 그룹화된 필드를 ORDER BY로 정렬하는 방법

MySQL에서 그룹화된 필드를 ORDER BY로 정렬하기

MySQL에서 특정 값들을 원하는 순서대로 정렬하려면 ORDER BY 절과 함께 CASE 표현식 및 IN() 함수를 활용할 수 있습니다. CASE는 여러 조건을 평가하여 각 조건에 맞는 값을 반환하고, ORDER BY는 이 값을 기준으로 오름차순 또는 내림차순 정렬을 수행합니다. IN()은 지정한 목록 안에 일치하는 값이 있는지 확인하는 데 사용됩니다.

이제 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성

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

mysql> create table DemoTable
(
    Value varchar(40)
);
Query OK, 0 rows affected (0.52 sec)

2. 데이터 삽입

INSERT 명령을 사용하여 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('100&101');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('90');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Mike45');
Query OK, 1 row affected (0.17 sec)

3. 전체 레코드 조회

SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+---------+
| Value   |
+---------+
| John    |
| 100&101 |
| Sam     |
| 90      |
| Mike45  |
+---------+
5 rows in set (0.00 sec)

4. CASE와 IN()을 활용한 그룹화된 정렬

다음은 CASE 표현식과 IN()을 사용하여 특정 그룹의 값들을 우선적으로 정렬하는 쿼리입니다.

mysql> select *from DemoTable
    order by case when Value IN('John','Sam','Mike45') then 100
    when Value='90' then 101
    when Value='100&101' then 102
    else 103
end;

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

+---------+
| Value   |
+---------+
| John    |
| Sam     |
| Mike45  |
| 90      |
| 100&101 |
+---------+
5 rows in set (0.03 sec)

동작 원리 설명

위 쿼리의 동작 방식을 살펴보면 다음과 같습니다.

첫 번째 조건: Value가 'John', 'Sam', 'Mike45' 중 하나(IN()로 검사)라면 정렬 기준값으로 100을 부여합니다. 따라서 이 세 값이 가장 먼저 출력됩니다.
두 번째 조건: Value가 '90'이면 101을 부여합니다.
세 번째 조건: Value가 '100&101'이면 102를 부여합니다.
그 외의 경우: 어떤 조건에도 해당하지 않으면 103을 부여하여 마지막에 정렬됩니다.

이처럼 CASE 표현식을 ORDER BY 절에 사용하면 알파벳순이나 숫자순 같은 일반적인 정렬 규칙 대신, 개발자가 직접 정의한 커스텀 우선순위에 따라 데이터를 유연하게 정렬할 수 있습니다. 이 기법은 상태값, 카테고리, 특정 항목 우선 노출 등 비표준 정렬이 필요한 실무 시나리오에서 매우 유용합니다.