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

MySQL에서 IN() 조건으로 사용자 지정 정렬 구현하기 – ORDER BY CASE 완벽 가이드

MySQL에서 IN()을 활용한 사용자 지정 정렬 방법

MySQL에서 특정 값들을 우선적으로 정렬하고 싶을 때, IN() 조건과 함께 ORDER BY CASE를 사용하면 원하는 순서대로 결과를 가져올 수 있습니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1단계: 테이블 생성

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

mysql> create table DemoTable752 (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Name varchar(100)
);
Query OK, 0 rows affected (0.63 sec)

2단계: 데이터 삽입

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

mysql> insert into DemoTable752(Name) values('John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable752(Name) values('Carol');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable752(Name) values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable752(Name) values('Mike');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable752(Name) values('Sam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable752(Name) values('Adam');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable752(Name) values('Chris');
Query OK, 1 row affected (0.26 sec)

3단계: 전체 레코드 조회

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable752;

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

+----+-------+
| Id | Name  |
+----+-------+
|  1 | John  |
|  2 | Carol |
|  3 | Bob   |
|  4 | Mike  |
|  5 | Sam   |
|  6 | Adam  |
|  7 | Chris |
+----+-------+
7 rows in set (0.00 sec)

4단계: CASE를 이용한 사용자 지정 정렬 쿼리

이제 CASE 표현식을 활용해 Id가 1, 2, 3인 레코드를 최우선으로 정렬하는 쿼리를 작성합니다.

mysql> select *from DemoTable752
   order by
      case
         when Id IN (1,2,3) then 1
         else Id
   END,
Name;

결과 확인

위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

+----+-------+
| Id | Name  |
+----+-------+
|  3 | Bob   |
|  2 | Carol |
|  1 | John  |
|  4 | Mike  |
|  5 | Sam   |
|  6 | Adam  |
|  7 | Chris |
+----+-------+
7 rows in set (0.00 sec)

동작 원리 설명

위 쿼리의 핵심은 CASE 표현식입니다. Id가 1, 2, 3에 포함되는 레코드는 정렬 기준값으로 1을 받아 가장 앞쪽에 배치되고, 나머지 레코드는 자신의 Id 값을 그대로 정렬 기준으로 사용합니다. 그 후 두 번째 정렬 기준인 Name 컬럼을 통해 Bob, Carol, John 순으로 이름 오름차순 정렬이 적용됩니다.

이처럼 ORDER BY CASE를 활용하면 특정 조건에 맞는 레코드를 우선 노출하거나, 완전히 사용자가 정의한 순서대로 결과를 정렬할 수 있어 실무에서 매우 유용하게 활용됩니다.