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

MySQL에서 특정 레코드를 우선 정렬하는 방법 – CASE 문 활용하기

MySQL에서 선택한 레코드를 맨 앞에 오도록 정렬하는 방법

MySQL에서 조회 결과를 정렬할 때, 특정 레코드를 가장 먼저(우선순위로) 배치하고 싶은 경우가 있습니다. 이럴 때는 CASE 문을 활용하면 간단하게 해결할 수 있습니다.

예를 들어, 숫자 값 중 1090이라는 레코드를 항상 첫 번째로 표시하고, 나머지 레코드들은 오름차순으로 정렬하는 방법을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

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

mysql> create table DemoTable
    (
    Number int
    );
Query OK, 0 rows affected (0.71 sec)

2단계: 레코드 삽입

INSERT 명령을 사용하여 테이블에 데이터를 입력합니다.

mysql> insert into DemoTable values(490);
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable values(310);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(540);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(123);
Query OK, 1 row affected (0.60 sec)
mysql> insert into DemoTable values(1230);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(1090);
Query OK, 1 row affected (0.43 sec)

3단계: 전체 레코드 확인

SELECT 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+--------+
| Number |
+--------+
| 490    |
| 310    |
| 540    |
| 123    |
| 1230   |
| 1090   |
+--------+
6 rows in set (0.00 sec)

4단계: CASE 문으로 특정 레코드 우선 정렬

이제 1090 값을 가진 레코드를 가장 먼저 표시하고, 나머지 레코드는 숫자 순서대로 정렬하는 쿼리입니다.

mysql> select * from DemoTable
order by (case when Number = 1090 then 0 else 1 end), Number;

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

+--------+
| Number |
+--------+
| 1090   |
| 123    |
| 310    |
| 490    |
| 540    |
| 1230   |
+--------+
6 rows in set (0.00 sec)

쿼리 동작 원리

이 쿼리의 핵심은 ORDER BY 절 안에 있는 CASE 문입니다.

  • 첫 번째 정렬 조건: case when Number = 1090 then 0 else 1 end — 값이 1090이면 0을 반환하고, 그 외에는 1을 반환합니다. 오름차순 정렬에서 0이 1보다 앞에 오므로, 1090인 레코드가 항상 최상단에 배치됩니다.
  • 두 번째 정렬 조건: Number — 첫 번째 조건의 값이 같은 레코드들(즉, 1090이 아닌 레코드들) 사이에서는 Number 컬럼 값을 기준으로 오름차순 정렬됩니다.

이 방식은 여러 개의 특정 값을 우선 정렬해야 할 때도 응용할 수 있습니다. 예를 들어 then 0, then 1, else 2처럼 반환값을 늘려가면 원하는 순서대로 유연하게 정렬 순위를 지정할 수 있습니다.