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

MySQL에서 0을 제외한 정수 정렬하는 방법 – ORDER BY 조건식 활용하기

MySQL에서 0을 제외한 정수 정렬하기

데이터베이스 작업 중에는 숫자 값을 정렬하되, 값이 0인 행은 맨 뒤로 보내고 나머지 정수만 오름차순 또는 내림차순으로 정렬해야 하는 경우가 종종 있습니다. MySQL에서는 ORDER BY 절에 간단한 조건식을 함께 사용하면 이를 손쉽게 구현할 수 있습니다.

기본 문법

값 0을 제외하고 정수를 재정렬하려면 아래 문법을 사용하세요.

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

여기서 yourColumnName = 0이라는 표현식은 열의 값이 0이면 1을, 0이 아니면 0을 반환합니다. MySQL은 기본적으로 오름차순(ASC)으로 정렬하기 때문에, 조건 결과가 0인 즉 0이 아닌 값들이 먼저 정렬되고, 그 뒤에 0인 값들이 배치됩니다.

예제 테이블 생성

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table reorderIntegerExcept0
    -> (
    -> value int
    -> );
Query OK, 0 rows affected (0.70 sec)

데이터 삽입

다음은 insert 명령을 사용해 테이블에 레코드를 삽입하는 쿼리입니다.

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

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

mysql> insert into reorderIntegerExcept0 values(0);
Query OK, 1 row affected (0.18 sec)

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

mysql> insert into reorderIntegerExcept0 values(0);
Query OK, 1 row affected (0.09 sec)

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

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

mysql> insert into reorderIntegerExcept0 values(0);
Query OK, 1 row affected (0.10 sec)

mysql> insert into reorderIntegerExcept0 values(300);
Query OK, 1 row affected (0.20 sec)

전체 레코드 조회

select 문을 사용해 테이블의 모든 레코드를 조회하는 쿼리는 다음과 같습니다.

mysql> select * from reorderIntegerExcept0;

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

+-------+
| value |
+-------+
| 90    |
| 10    |
| 0     |
| 40    |
| 0     |
| 50    |
| 80    |
| 0     |
| 300   |
+-------+
9 rows in set (0.00 sec)

현재 데이터에는 0이 세 개 포함되어 있으며, 값들이 입력된 순서 그대로 저장되어 있는 것을 확인할 수 있습니다.

0을 제외한 오름차순 정렬

이제 값 0을 제외하고 정수를 재정렬하는 쿼리입니다.

mysql> select * from reorderIntegerExcept0 order by value =0 ,value;

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

+-------+
| value |
+-------+
| 10    |
| 40    |
| 50    |
| 80    |
| 90    |
| 300   |
| 0     |
| 0     |
| 0     |
+-------+
9 rows in set (0.00 sec)

실행 결과를 보면 0이 아닌 값들이 10, 40, 50, 80, 90, 300 순으로 오름차순 정렬되고, 0인 값들은 모두 맨 뒤로 이동한 것을 확인할 수 있습니다.

0을 제외한 내림차순 정렬

0을 제외한 정수를 내림차순으로 정렬하고 싶다면 아래 쿼리처럼 두 번째 정렬 기준에 DESC를 추가하면 됩니다.

mysql> select * from reorderIntegerExcept0 order by value =0,value DESC;

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

+-------+
| value |
+-------+
| 300   |
| 90    |
| 80    |
| 50    |
| 40    |
| 10    |
| 0     |
| 0     |
| 0     |
+-------+
9 rows in set (0.00 sec)

마무리

이처럼 ORDER BY 열명 = 0 형태의 조건식을 활용하면 서브쿼리나 CASE 문 없이도 0인 값을 맨 뒤로 보내면서 나머지 값을 원하는 순서대로 정렬할 수 있습니다. NULL 값을 처리할 때 자주 쓰이는 IS NULL 조건과 같은 원리로, 실무에서 유용하게 활용되는 정렬 기법이니 꼭 기억해 두시기 바랍니다.