在订购查询降序或升序时,您何时会首先想要NULLS?
在我看来,绝大多数的时间是排序升序或降序的期望行为将是NULLS LAST。相反,我们必须首先指定NULLS。
答案 0 :(得分:16)
实际上,使用默认排序顺序(ASCENDING
)时,NULL值 last 。
逻辑规定排序顺序与DESCENDING
关键字相反,因此在这种情况下,NULL首先 。
但最好的部分是最后一个:你可以选择你想要的方式:
在撰写时引用current manual,版本9.3:
如果指定了
NULLS LAST
,则null值在所有非null之后排序 值;如果指定了NULLS FIRST
,则null值在所有之前排序 非空值。如果两者都未指定,则默认行为为 指定或暗示<{1}} 时NULLS LAST
,ASC
时NULLS FIRST
指定(因此,默认情况下,就像空值更大一样 比非空的)。指定DESC
时,默认为空排序 取决于运营商是小于还是大于运营商。
大胆强调我的。
答案 1 :(得分:1)
简单的答案是因为写Postgres的人就是这样设计的。 To quote:
null值的排序高于任何其他值。换句话说,对于升序排序,空值在末尾排序,并且按降序排序,空值在开头排序。
这假定您已经指定了ORDER BY子句,如果没有,则随机返回行。
如果指定了ORDER BY子句,则返回的行按指定的顺序排序。如果未给出ORDER BY,则按系统发现最快生成的顺序返回行。