NULL 값을 테이블 끝에 정렬


96

PostgreSQL을 사용 NULL하여 선택한 테이블의 끝까지 필드의 값이있는 행을 정렬하는 방법이 있습니까?

처럼:

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END

답변:


177

우선, NULL 값 기본 오름차순 으로 마지막에 정렬 됩니다. 추가 작업을 할 필요가 없습니다.

이 문제는 내림차순에 적용되며 이는 완벽한 역순이므로 먼저 NULL 값을 정렬합니다. 솔루션 @Mosty 지적 아웃 에 도입 된 PostgreSQL의 8.3 :

ORDER BY somevalue DESC NULLS LAST

대한 PostgreSQL의 8.2 당신이 대체 할 수있는이 표준 SQL 기능이없는 구형 또는 다른 RDBMS :

ORDER BY (somevalue IS NULL), somevalue DESC

FALSE이전 TRUE에 정렬 하므로 위의 예와 같이 NULL 값이 마지막에옵니다.

관련 나중에 답변 :


2
대부분의 실제 응용 프로그램에서 IMHO는 순서에 관계없이 null 값을 원할 것입니다. 예를 들어 선택적 타임 스탬프, 이름, 성 등으로 DESC를 정렬하면 수학적으로 DESC 순서가 ASC와 반대라는 것이 이해가되는 것처럼 보임에도 불구하고 정말 의심 스럽습니다. 아마도 null은 자신의 범주에 속하고 ASC, DESC의 영향을받지 않아야하며 항상 마지막에두면 더 나은 기본값이 될 수 있습니다.
Christophe Roussy

DESC 인 경우 인덱스에 영향을 미칠 수 있습니다. 이에 대한 메모도 추가 할 수 있습니까? postgresql.org/message-id/…
Christophe Roussy

@ChristopheRoussy : 정렬 순서와 일치하는 인덱스는 위의 링크 된 답변에서 터치됩니다.
Erwin Brandstetter 2018 년

3
개인적으로 기본값은 그 반대 여야한다고 생각합니다. NULL은 오름차순으로 먼저 나오고 마지막으로 내림차순으로 나옵니다. NULL이 "가장 작은"값이기 때문에 훨씬 더 직관적입니다.
Stephen

1
MYSQL에서 오는 사람들에게 이것은 lol입니까? 왜 처음에 이렇게 지어 졌을까요. 또는 Mysql이 결과를 최적화 했습니까?
CodeGuru

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.