Sql 将空值排序到表的末尾

Sql 将空值排序到表的末尾,sql,postgresql,null,sql-order-by,Sql,Postgresql,Null,Sql Order By,PostgreSQL是否有办法将字段中的NULL值的行排序到所选表的末尾 比如: 这就是诀窍吗 ORDER BY somevalue DESC NULLS LAST 取自:首先,空值按默认升序排列在最后。你不需要做任何额外的事情 这个问题适用于降序,这是一个完美的倒数,因此首先对空值进行排序。通过PostgreSQL 8.3引入: ORDER BY somevalue DESC NULLS LAST 对于PostgreSQL 8.2和旧版或其他没有此标准SQL功能的RDBMS,您可以替换:

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

比如:


这就是诀窍吗

ORDER BY somevalue DESC NULLS LAST
取自:

首先,空值按默认升序排列在最后。你不需要做任何额外的事情

这个问题适用于降序,这是一个完美的倒数,因此首先对空值进行排序。通过PostgreSQL 8.3引入:

ORDER BY somevalue DESC NULLS LAST
对于PostgreSQL 8.2和旧版或其他没有此标准SQL功能的RDBMS,您可以替换:

ORDER BY (somevalue IS NULL), somevalue DESC
FALSE
排序在
TRUE
之前,因此空值排在最后,就像上面的示例一样

有关稍后的答覆:


IMHO在大多数实际应用程序中,无论顺序如何,您都希望空值持续存在。例如,在可选时间戳、firstname、lastname等上对DESC进行排序。。。因此,我发现它确实值得怀疑,尽管从数学上讲,DESC order与ASC是相反的,这似乎是有道理的。可能空值只是属于它们自己的一个类别,不应该受到ASC、DESC和ALYST put last的影响,这是一个更好的默认值。如果它们是DESC,它可能会影响索引。也许您也可以添加一个关于这一点的注释@ChristopherRoussy:与排序顺序匹配的索引在上面的链接答案中被提及。我个人认为默认值应该是相反的:空值以升序排列,最后以降序排列。这更直观,因为NULL是“最小”的值。对于来自MYSQL的人来说,这是一个lol?当初为什么要这样建造呢。还是Mysql过度优化了结果
ORDER BY (somevalue IS NULL), somevalue DESC