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처럼 큰 값부터 차례대로 정렬된 것을 확인할 수 있습니다. 이 방법은 게시글 목록에서 고정글(공지사항)을 상단에 노출시키거나, 특정 우선순위 값을 먼저 보여주고 싶은 경우에 실무적으로 매우 유용하게 활용됩니다.