복붙노트

[SQL] 정렬 첫번째 열 ASC하지만 NULL 값으로?

SQL

정렬 첫번째 열 ASC하지만 NULL 값으로?

나는 날짜 / 시간 필드, 예를 들어,에 의해 PostgreSQL의 테이블 오름차순으로 정렬 할 필요가 LAST_UPDATED.

그러나 필드가 비어 있거나 null이 될 수 나는 null 이외 LAST_UPDATED 앞에 오는 LAST_UPDATED에 널 (null) 레코드를 원하는됩니다. 이것이 가능한가?

order by last_updated asc  -- and null last_updated records first ??

해결법

  1. ==============================

    1.포스트 그레스는 NULLS FIRST를 제공 | 정확히 필요성에 대한 수용에 ORDER BY 절에 대한 마지막 키워드 :

    포스트 그레스는 NULLS FIRST를 제공 | 정확히 필요성에 대한 수용에 ORDER BY 절에 대한 마지막 키워드 :

    ... ORDER BY last_updated NULLS FIRST
    

    전형적인 사용 사례 제 널 값 기본 오름차순 (ASC)의 완전한 반전을 수득 정렬 순서 (DESC)을 내림차순으로한다. 종종 바람직하지 - 그래서, 마지막으로 널 (null) 값을 유지하기 :

    ... ORDER BY last_updated DESC NULLS LAST
    

    이 일치하도록, 인덱스와 쿼리를 지원하기 위해 :

    CREATE INDEX foo_idx ON tbl (last_updated DESC NULLS LAST);
    

    포스트 그레스 거꾸로 BTREE 인덱스를 읽을 수 있지만 NULL 값이 추가되는 경우가 중요.

  2. ==============================

    2.당신은 CASE 문을 사용하여 사용자 정의 주문을 생성 할 수 있습니다. 해당 조건을 조건을 충족하지 않는 행에 할당 된 것보다 낮은 값을 충족 행에 CASE 문 당신의 상태를 확인하고 할당합니다. 아마 예를 주어 이해하기 가장 쉬운 방법 :

    당신은 CASE 문을 사용하여 사용자 정의 주문을 생성 할 수 있습니다. 해당 조건을 조건을 충족하지 않는 행에 할당 된 것보다 낮은 값을 충족 행에 CASE 문 당신의 상태를 확인하고 할당합니다. 아마 예를 주어 이해하기 가장 쉬운 방법 :

      SELECT last_updated 
        FROM your_table 
    ORDER BY CASE WHEN last_updated IS NULL THEN 0 ELSE 1 END, 
             last_updated ASC;
    
  3. from https://stackoverflow.com/questions/9510509/sort-by-column-asc-but-null-values-first by cc-by-sa and MIT license