날짜 / 시간 필드를 기준으로 오름차순으로 PostgreSQL 테이블을 정렬해야합니다 (예 : last_updated
.
그러나 해당 필드는 비어 있거나 null이 될 수 있으며 null이 아닌 레코드가 non-null 앞에last_updated
와야 합니다.
이것이 가능한가?last_updated
order by last_updated asc -- and null last_updated records first ??
날짜 / 시간 필드를 기준으로 오름차순으로 PostgreSQL 테이블을 정렬해야합니다 (예 : last_updated
.
그러나 해당 필드는 비어 있거나 null이 될 수 있으며 null이 아닌 레코드가 non-null 앞에last_updated
와야 합니다.
이것이 가능한가?last_updated
order by last_updated asc -- and null last_updated records first ??
답변:
Postgres는 그 요구를 정확히 충족시키기 위해 절에 NULLS FIRST | LAST
대한 키워드를 제공합니다 ORDER BY
.
... ORDER BY last_updated NULLS FIRST
전형적인 사용 사례 정렬 순서 (내림차순 인 DESC
기본 오름차순 (의 완전한 반전 산출), ASC
제 널 값을). 종종 바람직하지 않습니다. 따라서 null 값을 마지막으로 유지하려면 :
... ORDER BY last_updated DESC NULLS LAST
색인 을 사용 하여 쿼리를 지원하려면 다음과 일치하도록 만드세요.
CREATE INDEX foo_idx ON tbl (last_updated DESC NULLS LAST);
Postgres는 btree 인덱스를 역방향으로 읽을 수 있지만 NULL 값이 추가되는 위치는 중요합니다.
CASE 문을 사용하여 사용자 지정 ORDER BY를 만들 수 있습니다.
CASE 문은 조건을 확인하고 조건을 충족하지 않는 행에 할당 된 값보다 낮은 값을 해당 조건을 충족하는 행에 할당합니다.
예를 들어 이해하는 것이 가장 쉽습니다.
SELECT last_updated
FROM your_table
ORDER BY CASE WHEN last_updated IS NULL THEN 0 ELSE 1 END,
last_updated ASC;
ASC
기본 정렬 순서이므로 반드시 입력 할 필요는 없습니다.
NULLS FIRST
또한 널을 먼저 작성하는 ANSI 호환 방법입니다.
seenAt is null
) 만 볼 수 있다면, 내가 정렬 createdAt
instaed)
NULLS FIRST
값이 널이 아닌 경우에도 실제 값으로 정렬됩니다. 이것은 나를 위해 트릭을했습니다. 감사!