MySQL 공백 또는 NULL 정렬 하기

데이터를 정렬하기 위해 ORDER BY를 사용합니다.

정렬하려는 컬럼에 공백 또는 NULL 값이 있는 경우에는 ASC 또는 DESC로 정렬 방식을 지정해도 원하는 형태로 정렬이 안 되는 경우가 있습니다.

컬럼에 공백 또는 NULL이 포함된 컬럼을 정렬하는 방법을 알아보겠습니다.

 

공백 또는 NULL 정렬

아래와 같은 데이터가 있다고 가정하겠습니다.

id	name	age	type
1	홍길동	21	A
2	김철수	27	
3	이영희	22	A
4	정대한	26	(NULL)
5	안민국	23	F
6	지서울	25	E
7	조경긱	24	R

 

컬럼 type에는 공백과 NULL 그리고 값들이 들어있습니다.

type 컬럼을 정렬 항목으로 지정해서 검색해보겠습니다.

SELECT 
  * 
FROM test_table 
ORDER BY type ASC;

 

결과

id	name	age	type
4	정대한	 26	 (NULL)
2	김철수	 27	 
1	홍길동	 21	 A
3	이영희	 22	 A
6	지서울	 25	 E
5	안민국	 23	 F
7	조경긱	 24	 R

 

데이터가 들어있지 않는 공백과 NULL 레코드가 먼저 표시되었습니다.

값이 들어있는 레코드가 우선적으로 되게 하기 위해서는 다음과 같이 ORDER BY에 지정을 하면 됩니다.

SELECT 
  * 
FROM test_table 
ORDER BY
CASE
    WHEN type is NULL THEN '2'
    WHEN type = '' THEN '1'
    ELSE '0'
END, type ASC;

 

결과

id	name	age	type
1	홍길동  21	 A
3	이영희  22	 A
6	지서울  25	 E
5	안민국  23	 F
7	조경긱  24	 R
2	김철수  27	 
4	정대한  26	 (NULL)

 

출력된 결과를 확인해보면 값이 들어있는 레코드부터 정렬이 되었습니다.

그리고 공백이 출력되고 마지막으로 출력되었습니다.

댓글