개요
MySQL에서는 ORDER BY 절에 조건식을 활용하면 특정 행을 원하는 위치에 고정하고, 나머지 행들은 별도의 기준으로 정렬할 수 있습니다. 이번 글에서는 id가 10인 행을 항상 맨 앞에 두고, 나머지 값은 오름차순으로 정렬하는 방법을 예제와 함께 살펴보겠습니다.
1. 테이블 생성
먼저 테이블을 생성합니다.
mysql> create table DemoTable
(
id int
);
Query OK, 0 rows affected (0.52 sec)2. 샘플 데이터 삽입
INSERT 명령을 사용해 테이블에 여러 개의 레코드를 입력합니다.
mysql> insert into DemoTable values(10); Query OK, 1 row affected (0.43 sec) mysql> insert into DemoTable values(7); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(8); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable values(6); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable values(9); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(11); Query OK, 1 row affected (0.12 sec)
3. 전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+ | id | +------+ | 10 | | 7 | | 8 | | 6 | | 9 | | 11 | +------+ 6 rows in set (0.00 sec)
4. 특정 행을 고정하고 나머지 값 정렬하기
다음 쿼리는 id가 10인 행을 맨 앞에 고정하고, 나머지 행들은 id 기준 오름차순(ASC)으로 정렬합니다.
mysql> select *from DemoTable order by id=10 DESC,id asc;
동작 원리
MySQL에서 id=10은 불리언(Boolean) 조건식으로 평가됩니다. 조건이 참이면 1, 거짓이면 0을 반환하는데, 이 값을 내림차순(DESC)으로 정렬하면 참(1)에 해당하는 행, 즉 id가 10인 행이 가장 먼저 출력됩니다. 이어서 두 번째 정렬 기준인 id asc에 따라 나머지 행들이 오름차순으로 정렬되는 것입니다.
실행 결과는 다음과 같습니다.
+------+ | id | +------+ | 10 | | 6 | | 7 | | 8 | | 9 | | 11 | +------+ 6 rows in set (0.00 sec)
마무리
이처럼 ORDER BY 절에 조건식과 정렬 방향을 조합하면 별도의 CASE 문 없이도 간단하게 특정 행을 상단에 고정할 수 있습니다. 공지사항이나 추천 항목처럼 우선적으로 보여줘야 하는 데이터를 정렬할 때 유용하게 활용할 수 있습니다.