본문 바로가기

경험

[MySql] [Oracle] 정렬 시 Null 위치 컨트롤하기

우선 순위 기능 넣어주세요~ 낮을수록 위에 오고, 없는 데이터는 그 아래에 뿌려주세요~

  위 요구 사항을 해결하기 위해서 priority 컬럼을 만들어주었다.

-- Null을 허용함
ALTER TABLE board ADD priority INT​

 

그 후, 그냥 ASC 정렬을 하면 우선순위가 낮은대로 출력될 줄 알았다.

SELECT * FROM board ORDER BY priority ASC

하지만 출력결과는 아래와 같았다..

DATA PRIORITY
{~~~~~}  
{~~~~~}  
{~~~~~} 1
{~~~~~} 3

ASC 정렬 시 null이 우선되기 때문이었다.


문제 해결

  • TRUE는 1이고 FALSE는 0이다. 누가 더 큰가? TRUE가 더 크다.
  • 우선순위가 있는 녀석들과 없는 녀석들의 차이는 우선순위의 NULL 여부이다.
  • 정렬은 여러 컬럼(혹은 식)을 기준으로 할 수 있다.

위 사항들을 보았을 때, 해결 방법이 떠올랐다.

SELECT * FROM board 
ORDER BY 
	priority IS NULL, priority ASC, updated_at DESC
-- updatedAt은 그냥 추가해보았다

위 쿼리문대로 조회하니 아래와 같은 결과가 나왔다. 성공~!

DATA PRIORITY UPDATED_AT
{~~~~~} 1 2002-10-11
{~~~~~} 3 2022-10-11
{~~~~~} 3 2021-09-16
{~~~~~}   2003-11-11
{~~~~~}   2000-08-13

 

+ 아래 쿼리는 오라클의 경우다.

SELECT * FROM board 
ORDER BY 
	priority NULLS LAST
    -- 반대의 경우는 NULLS FIRST이다
반응형