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

MySQL에서 특정 값을 맨 뒤로 정렬하는 방법 – ORDER BY 활용법


MySQL에서 특정 값을 맨 뒤로 정렬하기

MySQL에서 데이터를 조회할 때, 'Not Known'처럼 의미가 없거나 임시적인 값은 목록 맨 아래로 보내고 나머지 값들은 알파벳 순서대로 정렬하고 싶은 경우가 있습니다. 이럴 때 ORDER BY 절과 불리언(Boolean) 표현식을 조합하면 손쉽게 해결할 수 있습니다. 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> create table demo57
-> (
-> id int not null auto_increment primary key,
-> full_name varchar(20)
-> );
Query OK, 0 rows affected (1.60 sec)

2단계: 샘플 데이터 삽입

insert 명령어로 레코드를 몇 개 추가합니다. 이 중 'Not Known'이 곧 맨 뒤로 보낼 대상 값입니다.

mysql> insert into demo57(full_name) values('John Smith');
Query OK, 1 row affected (0.24 sec)

mysql> insert into demo57(full_name) values('David Miller');
Query OK, 1 row affected (0.13 sec)

mysql> insert into demo57(full_name) values('Not Known');
Query OK, 1 row affected (0.13 sec)

mysql> insert into demo57(full_name) values('Chris Brown');
Query OK, 1 row affected (0.31 sec)

3단계: 저장된 데이터 확인

select 문으로 테이블에 들어 있는 전체 레코드를 조회합니다.

mysql> select *from demo57;

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

+----+--------------+
| id | full_name    |
+----+--------------+
|  1 | John Smith   |
|  2 | David Miller |
|  3 | Not Known    |
|  4 | Chris Brown  |
+----+--------------+
4 rows in set (0.00 sec)

ORDER BY로 특정 값을 마지막에 배치하는 쿼리

'Not Known'을 결과의 맨 끝으로 보내면서 나머지 이름들은 알파벳 역순으로 정렬하는 쿼리는 다음과 같습니다.

mysql> select *from demo57
-> order by(full_name="Not Known"),full_name desc;

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

+----+--------------+
| id | full_name    |
+----+--------------+
|  1 | John Smith   |
|  2 | David Miller |
|  4 | Chris Brown  |
|  3 | Not Known    |
+----+--------------+
4 rows in set (0.00 sec)

출력을 보면 'Not Known'이 마지막 행으로 밀려나고, 나머지 이름들은 알파벳 역순(J → D → C)으로 정렬된 것을 확인할 수 있습니다.

동작 원리

  • (full_name="Not Known"): 각 행에 대해 값이 일치하면 1(true), 일치하지 않으면 0(false)을 반환합니다.
  • 기본 오름차순 정렬: 0이 1보다 앞서므로, 일치하지 않는 행들이 먼저 출력되고 일치하는 행은 자연스럽게 맨 뒤로 이동합니다.
  • full_name desc: 첫 번째 정렬 기준이 동일한 행들 사이에서 이름을 내림차순으로 정렬합니다.

이 기법은 'Unknown', 'N/A', 빈 문자열 같은 플레이스홀더 값을 항상 목록 하단에 유지하고 싶을 때 실무에서 매우 유용하게 활용됩니다.