아래 예제 쿼리는 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 값을 가장 나중에 배치합니다.
'개발이야기 > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] division by zero 에러 해결하기 (CASE문, NULLIF, COALESCE) (0) | 2024.08.02 |
---|---|
[PostgreSQL] Function IF문 / CASE문 사용방법, 예제 (0) | 2024.01.23 |
[PostgreSQL] Function 동적 페이징 처리하기 (LIMIT, OFFSET) (0) | 2024.01.05 |
[PostgreSQL] 테이블, Function 생성 후 조회하기 (1) | 2024.01.04 |
댓글