MySQL에서 두 개의 열을 활용한 사용자 지정 정렬
MySQL에서 두 개 이상의 열을 기준으로 사용자 지정(custom) 정렬을 수행하려면 ORDER BY 절에 CASE 문을 조합하면 됩니다. CASE 문을 활용하면 특정 값에 우선순위를 부여해 원하는 순서대로 데이터를 정렬할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1610
-> (
-> Marks int,
-> Name varchar(20)
-> ) ;
Query OK, 0 rows affected (0.51 sec)
테이블에 레코드 삽입하기
INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1610 values(85,'John');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1610 values(78,'Carol');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1610 values(78,'John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable1610 values(85,'Carol');
Query OK, 1 row affected (0.20 sec)
저장된 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1610;
실행 결과는 다음과 같습니다.
+-------+-------+
| Marks | Name |
+-------+-------+
| 85 | John |
| 78 | Carol |
| 78 | John |
| 85 | Carol |
+-------+-------+
4 rows in set (0.00 sec)
두 개의 열로 사용자 지정 정렬 실행하기
다음은 MySQL에서 두 개의 서로 다른 열(Marks와 Name)을 사용해 사용자 지정 정렬을 수행하는 쿼리입니다.
mysql> select * from DemoTable1610
-> order by Marks,case when Name='Carol' then 1 else 0 end;
위 쿼리는 먼저 Marks 열을 오름차순으로 정렬하고, 동일한 점수 범위 내에서는 CASE 문을 통해 'Carol'이 아닌 이름('John')을 먼저 배치하고 'Carol'을 나중에 배치합니다. 실행 결과는 다음과 같습니다.
+-------+-------+
| Marks | Name |
+-------+-------+
| 78 | John |
| 78 | Carol |
| 85 | John |
| 85 | Carol |
+-------+-------+
4 rows in set (0.00 sec)
결과를 보면 Marks 값이 낮은 순서대로 정렬되고, 동일한 Marks 값 내에서는 'John'이 'Carol'보다 앞에 위치하는 것을 확인할 수 있습니다. 이처럼 ORDER BY 절과 CASE 문을 함께 사용하면 복잡한 비즈니스 규칙에 맞는 유연한 정렬 로직을 손쉽게 구현할 수 있습니다.