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

MySQL에서 특정 행 값을 고정하고 나머지 값 정렬하기 (ORDER BY 활용)

개요

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 문 없이도 간단하게 특정 행을 상단에 고정할 수 있습니다. 공지사항이나 추천 항목처럼 우선적으로 보여줘야 하는 데이터를 정렬할 때 유용하게 활용할 수 있습니다.