Development Tip

날짜 시간 asc로 PostgreSQL 정렬, 먼저 null입니까?

yourdevel 2020. 11. 7. 10:34
반응형

날짜 시간 asc로 PostgreSQL 정렬, 먼저 null입니까?


날짜 / 시간 필드를 기준으로 오름차순으로 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;

참고 URL : https://stackoverflow.com/questions/9510509/postgresql-sort-by-datetime-asc-null-first

반응형