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

MySQL에서 특정 숫자를 마지막에 배치하며 정렬하는 방법

MySQL의 ORDER BY 절을 사용할 때, 일반적인 오름차순이나 내림차순 정렬이 아니라 특정 숫자만 맨 뒤로 보내고 나머지 값들은 오름차순으로 정렬해야 하는 경우가 있습니다. 예를 들어 값 10만 목록의 끝에 위치시키고, 나머지 숫자들은 오름차순으로 정렬하는 상황을 생각해 볼 수 있습니다.

이 글에서는 이러한 요구 사항을 해결하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 데모용 테이블을 생성합니다.

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

2. 데이터 삽입

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

mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.13 sec)

3. 저장된 데이터 확인

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

mysql> select *from DemoTable;

출력 결과

+--------+
| status |
+--------+
| 30 |
| 20 |
| 20 |
| 30 |
| 10 |
| 40 |
+--------+
6 rows in set (0.00 sec)

4. 원하는 정렬 결과

목표는 다음과 같은 결과를 얻는 것입니다. 숫자 10은 맨 마지막에 위치하고, 나머지 값들은 오름차순으로 정렬됩니다.

20
20
30
30
40
10

5. 해결 방법: 조건식을 활용한 ORDER BY

핵심 아이디어는 ORDER BY 절에 비교식 status=10을 함께 사용하는 것입니다. MySQL에서 비교식은 참일 때 1, 거짓일 때 0을 반환합니다. 따라서 10이 아닌 값은 0으로 평가되어 앞쪽에 정렬되고, 10인 값은 1로 평가되어 맨 뒤로 밀려나게 됩니다. 두 번째 정렬 기준인 status가 나머지 값들을 오름차순으로 정렬해 줍니다.

다음은 MySQL에서 특정 숫자를 기준으로 정렬을 적용하는 쿼리입니다.

mysql> select *from DemoTable order by status=10,status;

출력 결과

+--------+
| status |
+--------+
| 20 |
| 20 |
| 30 |
| 30 |
| 40 |
| 10 |
+--------+
6 rows in set (0.00 sec)

마무리

위 출력 결과에서 볼 수 있듯이, 값 10이 목록의 맨 마지막에 배치되고 나머지 숫자들은 오름차순으로 깔끔하게 정렬되었습니다. 이 기법은 CASE 표현식 없이도 간단한 불리언 조건식만으로 원하는 우선순위 정렬을 구현할 수 있는 실용적인 방법입니다. 여러 개의 특정 값을 처리해야 하는 경우에는 ORDER BY status=10, status=5, status처럼 조건식을 연달아 나열하여 확장할 수도 있습니다.