为什么在PostgreSQL查询中排序DESC时会出现NULL值?

时间:2014-01-06 20:28:47

标签: sql database postgresql null sql-order-by

在订购查询降序或升序时,您何时会首先想要NULLS?

在我看来,绝大多数的时间是排序升序或降序的期望行为将是NULLS LAST。相反,我们必须首先指定NULLS。

2 个答案:

答案 0 :(得分:16)

实际上,使用默认排序顺序(ASCENDING)时,NULL值 last

逻辑规定排序顺序与DESCENDING关键字相反,因此在这种情况下,NULL首先

但最好的部分是最后一个:你可以选择你想要的方式:

在撰写时引用current manual,版本9.3:

  

如果指定了NULLS LAST,则null值在所有非null之后排序   值;如果指定了NULLS FIRST,则null值在所有之前排序   非空值。如果两者都未指定,则默认行为为   指定或暗示<{1}} NULLS LASTASCNULLS FIRST   指定(因此,默认情况下,就像空值更大一样   比非空的)。指定DESC时,默认为空排序   取决于运营商是小于还是大于运营商。

大胆强调我的。

答案 1 :(得分:1)

简单的答案是因为写Postgres的人就是这样设计的。 To quote

  

null值的排序高于任何其他值。换句话说,对于升序排序,空值在末尾排序,并且按降序排序,空值在开头排序。

这假定您已经指定了ORDER BY子句,如果没有,则随机返回行。

  

如果指定了ORDER BY子句,则返回的行按指定的顺序排序。如果未给出ORDER BY,则按系统发现最快生成的顺序返回行。