将NULL值排序到表的末尾

hel*_*lle 74 sql postgresql null sql-order-by

PostgreSQL有没有办法将NULL字段中值的行排序到所选表的末尾?

喜欢:

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 143

首先,NULL值上次在默认排序升序的顺序.你不需要做任何额外的事情.

该问题适用于降序,这是完美的逆,因此首先对NULL值进行排序.@Mosty指出解决方案是在PostgreSQL 8.3中引入的:

ORDER BY somevalue DESC NULLS LAST
Run Code Online (Sandbox Code Playgroud)

对于没有此标准SQL功能的PostgreSQL 8.2及更早版本或其他RDBMS,您可以替换:

ORDER BY (somevalue IS NULL), somevalue DESC
Run Code Online (Sandbox Code Playgroud)

FALSE之前排序TRUE,所以NULL值最后,就像上面的例子.

相关的后续回答:

  • 我个人认为默认值应该是相反的:NULL 升序排在第一位,降序排在最后。这更直观,因为 NULL 是“最小”值。 (3认同)
  • 恕我直言,在大多数现实世界的应用程序中,无论顺序如何,您都希望空值最后。例如,在可选的时间戳、名字、姓氏等上对 DESC 进行排序,所以我发现它真的很可疑,尽管数学上 DESC 顺序与 ASC 相反似乎是有道理的。也许空值只是属于它们自己的一个类别,不应该受 ASC、DESC 的影响并且总是放在最后,那会是一个更好的默认值。 (2认同)