当查询升序或降序排序时,您何时希望空值排在第一位?
我认为,在大多数情况下,无论是升序还是降序排序,期望的行为都应该是将空值排在最后。因此,我们应该要指定空值排在最前面。
当查询升序或降序排序时,您何时希望空值排在第一位?
我认为,在大多数情况下,无论是升序还是降序排序,期望的行为都应该是将空值排在最后。因此,我们应该要指定空值排在最前面。
实际上,使用默认排序顺序(ASCENDING
),NULL 值会排在最后。
逻辑推断,在使用关键字 DESCENDING
时应该反转排序顺序,这样 NULL 值会排在最前面。
但最好的部分是:你可以选择你想要的方式:
引用当前手册,截至撰写本文时为9.3版本:
如果指定了
NULLS LAST
,则 NULL 值将排在所有非 NULL 值之后;如果指定了NULLS FIRST
,则 NULL 值将排在所有非 NULL 值之前。如果未指定,则默认行为为在指定或隐含ASC
时为NULLS LAST
,在指定DESC
时为NULLS FIRST
(因此,默认情况下,NULL 值被视为大于非 NULL 值)。当指定USING
时,默认的 NULL 排序取决于运算符是小于还是大于运算符。
加粗部分为重点。
空值排序高于任何其他值。换句话说,在升序排列中,空值位于最后,在降序排列中,空值位于开头。
这假定您已经指定了ORDER BY子句,如果没有,则返回的行是随机的。
如果指定了ORDER BY子句,则返回的行按指定顺序排序。如果未给出ORDER BY,则系统以最快的方式返回行。
NULL
进行排序,因此这取决于将其写入Postgres的人:http://en.wikipedia.org/wiki/Order_by - Sam