개요
MySQL에서 ORDER BY 절을 사용할 때, 단순한 오름차순·내림차순 정렬이 아니라 특정 값을 가장 먼저 표시하고 싶은 경우가 있습니다. 예를 들어 숫자 45를 첫 번째로 보여준 뒤, 나머지 값들은 오름차순으로 정렬하는 방법을 예제와 함께 알아보겠습니다.
1. 테이블 생성
먼저 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Number int
-> );
Query OK, 0 rows affected (0.57 sec)
2. 데이터 삽입
INSERT 명령을 사용하여 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(12);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values(14);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(19);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(45);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(56);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(103);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(87);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(98);
Query OK, 1 row affected (0.12 sec)
3. 전체 데이터 조회
SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
출력 결과
+--------+
| Number |
+--------+
| 10 |
| 20 |
| 12 |
| 14 |
| 19 |
| 45 |
| 56 |
| 103 |
| 87 |
| 98 |
+--------+
10 rows in set (0.00 sec)
현재 데이터는 삽입된 순서대로 저장되어 있으며, 별도의 정렬 기준이 적용되지 않은 상태입니다.
4. 특정 값을 맨 앞으로 정렬하는 쿼리
ORDER BY 절 안에 비교 표현식을 활용하면 원하는 값을 우선적으로 정렬할 수 있습니다.
mysql> select *from DemoTable order by (Number=45) DESC, Number;
동작 원리
핵심은 (Number=45)라는 표현식입니다. MySQL에서 비교 표현식은 조건이 참이면 1, 거짓이면 0을 반환합니다. 따라서 정렬 과정은 다음과 같이 진행됩니다.
- Number가 45인 행은 1을 반환하므로, 내림차순(DESC) 정렬 시 가장 앞에 위치합니다.
- 나머지 행은 모두 0을 반환하며, 두 번째 정렬 기준인
Number오름차순에 따라 정렬됩니다.
출력 결과
+--------+
| Number |
+--------+
| 45 |
| 10 |
| 12 |
| 14 |
| 19 |
| 20 |
| 56 |
| 87 |
| 98 |
| 103 |
+--------+
10 rows in set (0.00 sec)
결과를 보면 45가 첫 번째로 표시되고, 나머지 값들은 10부터 103까지 오름차순으로 깔끔하게 정렬된 것을 확인할 수 있습니다.
마무리
이처럼 ORDER BY에 불리언 표현식을 조합하면 별도의 CASE 문 없이도 간단하게 특정 값을 최상단에 배치할 수 있습니다. 여러 개의 값을 우선순위별로 정렬하고 싶다면 CASE WHEN 표현식을 활용하는 방법도 함께 고려해 보세요.