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

MySQL에서 특정 값을 우선 정렬하고 나머지 데이터는 오름차순으로 표시하는 방법

MySQL에서 특정 열의 특정 값을 가장 먼저 표시하고, 나머지 레코드는 오름차순으로 정렬해야 하는 경우가 종종 있습니다. 예를 들어 월 번호 목록에서 5월(5)을 맨 앞에 배치하고 나머지 월은 순서대로 보여주고 싶다면, ORDER BY 절에 불리언(Boolean) 표현식을 활용하면 간단하게 해결할 수 있습니다.

1. 테이블 생성하기

먼저 데모용 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
-> (
-> MonthNumber int
-> );
Query OK, 0 rows affected (1.68 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용하여 테이블에 여러 개의 레코드를 삽입합니다.

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(1);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(9);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values(6);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(8);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values(5);
Query OK, 1 row affected (0.11 sec)

3. 전체 레코드 확인하기

SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-------------+
| MonthNumber |
+-------------+
| 10 |
| 1 |
| 9 |
| 6 |
| 8 |
| 5 |
+-------------+
6 rows in set (0.00 sec)

4. 특정 값을 우선 정렬하는 쿼리

특정 값(여기서는 5)을 맨 앞에 표시하고, 나머지 레코드를 오름차순으로 정렬하려면 다음과 같은 쿼리를 사용합니다.

mysql> select * from DemoTable
-> order by MonthNumber=5 desc,MonthNumber asc;

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

+-------------+
| MonthNumber |
+-------------+
| 5 |
| 1 |
| 6 |
| 8 |
| 9 |
| 10 |
+-------------+
6 rows in set (0.00 sec)

동작 원리

이 쿼리가 작동하는 원리는 다음과 같습니다. MonthNumber=5는 조건식으로, 해당 행의 값이 5이면 1(True), 아니면 0(False)을 반환합니다. 이 식을 내림차순(desc)으로 정렬하면 값이 5인 행(반환값 1)이 가장 앞에 위치하게 됩니다. 그 후 두 번째 정렬 기준인 MonthNumber asc가 적용되어 나머지 행들이 오름차순으로 정렬됩니다.

이 방법은 특정 항목(예: 현재 월, 인기 상품, 고정 공지 등)을 목록 최상단에 고정하고 싶을 때 매우 유용하게 활용할 수 있습니다.