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

MySQL에서 0을 먼저 정렬한 뒤 나머지 값을 내림차순으로 정렬하는 방법

MySQL에서 0인 값은 가장 앞에 오고, 나머지 값들은 큰 숫자부터 작은 숫자 순(내림차순)으로 정렬하고 싶다면 아래 문법을 사용하면 됩니다.

select * from yourTableName order by yourColumnName=0 DESC, yourColumnName DESC;

핵심 원리

이 쿼리의 핵심은 yourColumnName=0이라는 조건식입니다. MySQL에서는 비교 연산식이 참일 때 1, 거짓일 때 0을 반환합니다. 따라서 이 식을 기준으로 내림차순(DESC) 정렬하면 값이 0인 행(조건 결과 1)이 먼저 배치되고, 그 다음 두 번째 정렬 기준인 yourColumnName DESC에 의해 나머지 행들이 큰 값부터 정렬됩니다.

예제 테이블 생성하기

먼저 예제로 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
(
    Value int
);
Query OK, 0 rows affected (0.65 sec)

레코드 삽입하기

insert 명령어를 사용해 테이블에 데이터를 입력합니다.

mysql> insert into DemoTable values(90);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(0);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(0);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(70);
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values(0);
Query OK, 1 row affected (0.15 sec)

저장된 데이터 확인하기

select 명령어로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-------+
| Value |
+-------+
| 90    |
| 0     |
| 20    |
| 0     |
| 10    |
| 70    |
| 0     |
+-------+
7 rows in set (0.00 sec)

0을 먼저 정렬하는 쿼리 실행하기

이제 0인 값을 맨 앞으로 보내고, 나머지 값들을 내림차순으로 정렬하는 쿼리를 실행해 보겠습니다.

mysql> select *from DemoTable order by Value=0 DESC, Value DESC;

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

+-------+
| Value |
+-------+
| 0     |
| 0     |
| 0     |
| 90    |
| 70    |
| 20    |
| 10    |
+-------+
7 rows in set (0.00 sec)

결과 분석

출력 결과를 보면 0인 세 개의 행이 가장 먼저 나타나고, 그 뒤로 90, 70, 20, 10처럼 큰 값부터 차례대로 정렬된 것을 확인할 수 있습니다. 이 방법은 게시글 목록에서 고정글(공지사항)을 상단에 노출시키거나, 특정 우선순위 값을 먼저 보여주고 싶은 경우에 실무적으로 매우 유용하게 활용됩니다.