为什么在 PostgreSQL 查询中对 DESC 进行排序时 NULL 值排在前面?

问题描述 投票:0回答:2

对查询进行降序或升序排序时,什么时候您会首先需要 NULL?

在我看来,“绝大多数”时间,无论是升序排序还是降序排序,所需的行为都是 NULLS LAST。相反,我们应该首先指定 NULL。

sql database postgresql null sql-order-by
2个回答
23
投票
ASCENDING

) NULL 值出现在

last
逻辑表明,排序顺序应使用

DESCENDING

关键字来反转,因此在这种情况下,空值会出现

first
但是您可以选择您想要的方式。参见:

说明书:

如果指定了
NULLS LAST

,则空值将在所有非空值之后排序 价值观;如果指定了

NULLS FIRST
,则空值排序在所有值之前 非空值。如果两者均未指定,则默认行为是 当指定或隐含
NULLS LAST
时,ASC
,当 
NULLS FIRST
 时,
DESC
已指定(因此,默认情况下表现为空值更大 比非空值)。当指定
USING
时,默认空排序 取决于运算符是小于还是大于运算符。

我的粗体强调。

答案很简单,因为这就是编写 Postgres 的人的设计方式。

引用

1
投票

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

这假设您已指定 ORDER BY 子句,如果未指定,则随机返回行。

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

© www.soinside.com 2019 - 2024. All rights reserved.