개발이야기/PostgreSQL

[PostgreSQL] ORDER BY 특정 순서로 먼저 정렬 하기 (ORDER BY CASE WHEN, ORDER BY CASE WHEN IN

후린개발자 2024. 7. 17.
반응형

아래 예제 쿼리는 PostgreSQL에서 ORDER BY를 활용한 다양한 정렬 방법을 작성해 보았습니다.

ORDER BY 절을 사용하면 단순한 오름차순 및 내림차순 정렬뿐만 아니라 다양한 조건에 따라 데이터를 정렬할 수 있습니다. 조건부 정렬, 특정 순서로 정렬, NULL 값을 먼저 또는 나중에 정렬은 알아두면 좋은 쿼리입니다.
 
 

테이블 조회

select num, id, name from scheduler.tbl_test tt

 

테이블 조회

 
 

조건부 정렬

SELECT num, id, name 
FROM scheduler.tbl_test tt
ORDER BY 
    CASE WHEN num IN (2, 3, 1, 6, 7) THEN 1 ELSE 2 END,  -- 조건에 따라 그룹화
    num;  -- 기본 정렬

 
-CASE WHEN num IN (2, 3, 1, 6, 7) THEN 1 ELSE 2 END 부분은 num이 2, 3, 1, 6, 7인 경우 1로, 그렇지 않은 경우 2로 설정하여 두 그룹으로 나눕니다.

-첫 번째 그룹 (num이 2, 3, 1, 6, 7인 경우)은 우선적으로 정렬되고, 두 번째 그룹 (그 외의 경우)은 그다음에 정렬됩니다.
-각 그룹 내에서는 num 값을 기준으로 오름차순으로 정렬됩니다.
 

조건부 정렬

 

 
특정 순서로 정렬

SELECT num, id, name 
FROM scheduler.tbl_test tt
ORDER BY CASE num
    WHEN 2 THEN 1
    WHEN 3 THEN 2
    WHEN 1 THEN 3
    WHEN 6 THEN 4
    WHEN 7 THEN 5
    WHEN 4 THEN 29
    WHEN 5 THEN 30
    ELSE 999 -- 임의의 큰 숫자로 나머지 값들이 기본 정렬되도록 함
END, num;

 
-CASE 문을 사용하여 특정 num 값에 대해 우선순위를 지정하고, 나머지 값들은 num 값으로 정렬합니다.
특정 순서가 먼저 오고 나머지 값들은 자연스럽게 num 값 순서대로 정렬됩니다.

-CASE 문에 지정된 num 값들 (2, 3, 1, 6, 7, 4, 5)은 해당 순서로 정렬됩니다.
-CASE 문에 포함되지 않은 나머지 num 값들은 999로 간주되어 num 값 자체를 기준으로 정렬됩니다.
 

특정 순서로 정렬

 
 

랜덤 순서로 정렬

select num, id, name from scheduler.tbl_test tt 
ORDER BY RANDOM();

 
-RANDOM() 함수를 사용하여 결과를 무작위 순서로 정렬합니다.
 

랜덤 순서로 정렬

 
 
 

NULL 값을 먼저 또는 나중에 정렬

SELECT num, id, name 
FROM scheduler.tbl_test tt
ORDER BY name ASC NULLS FIRST;  -- NULL 값을 먼저 오름차순 정렬

 
-ORDER BY num ASC NULLS FIRST는 num 열의 값을 기준으로 오름차순으로 정렬하되, NULL 값을 먼저 배치하는 방식입니다. 
-NULLS FIRST: NULL 값을 가장 먼저 배치합니다.
-NULLS LAST: NULL 값을 가장 나중에 배치합니다.
 

NULL 값 기준 정렬
반응형

댓글

💲 추천 글