将NULL值排序到表的末尾


93

PostgreSQL是否可以对NULL所选表末尾的字段中的值进行排序?

喜欢:

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END

Answers:


168

首先,NULL值在默认升序排在最后的顺序。您无需执行任何其他操作。

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

ORDER BY somevalue DESC NULLS LAST

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

ORDER BY (somevalue IS NULL), somevalue DESC

FALSE 之前排序 TRUE就像在上面的示例中一样,在,因此NULL值排在最后。

相关稍后的答案:


1
恕我直言,在大多数实际应用中,无论顺序如何,您都希望null值持续存在。例如,在可选的时间戳,名字,姓氏等上对DESC进行排序,因此即使在数学上似乎以DESC顺序与ASC相反,我也发现它确实令人怀疑。也许null只是它们自己的一个类别,并且不应该受ASC,DESC的影响并且始终放在最后,这将是更好的默认设置。
Christophe Roussy

如果它们是DESC,则可能会影响索引,也许您也可以对此添加注释?postgresql.org/message-id/...
克里斯托夫鲁西研究所

@ChristopheRoussy:在上面的链接的答案中触摸了与排序顺序匹配的索引。
Erwin Brandstetter

2
我个人认为默认值应该相反:NULL首先以升序排列,然后以降序排列。这更直观,因为NULL是“最小”值。
斯蒂芬,

1
对于来自MYSQL的人来说,这是大声笑吗?为什么首先要像这样建造。还是Mysql过分优化了结果
CodeGuru

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.