last_updated
。但是该字段允许为空或null,我希望
last_updated
中具有null的记录出现在非null last_updated
之前。这可能吗?
order by last_updated asc -- and null last_updated records first ??
#1 楼
Postgres为NULLS FIRST | LAST
子句提供了ORDER BY
关键字,以完全满足该需求:首先反转具有空值的默认升序(DESC
)。通常不理想-因此,最后保留空值:... ORDER BY last_updated NULLS FIRST
要支持带有索引的查询,请使其匹配:
... ORDER BY last_updated DESC NULLS LAST
Postgres可以向后读取btree索引,但是在附加NULL值的地方很重要。
评论
@mhd您不是Google的“ postgres首先将null排序”吗?
–大卫·奥尔德里奇(David Aldridge)
13年3月29日在14:33
是的那就是我得到这个页面的方式:)
–ibrewster
13年7月22日在20:09
感谢您的回答,PostgreSQL很棒。
–greatghoul
16年5月13日在8:14
感谢你的回答。 SQLite3添加了此功能,在使用它之前,我想确保它与PostgreSQL兼容。事实证明,这是最近的标准!
–布拉德
7月8日18:15
#2 楼
您可以使用CASE语句创建自定义ORDER BY。CASE语句检查您的条件,并为满足该条件的行分配一个比为其分配的值低的值。
/>以下示例可能最容易理解:
SELECT last_updated
FROM your_table
ORDER BY CASE WHEN last_updated IS NULL THEN 0 ELSE 1 END,
last_updated ASC;
评论
同样,但您可能知道这一点,ASC是默认的排序顺序,因此您不必一定要键入它。
–mechanical_meat
2012年3月1日下午4:29
NULLS FIRST也是ANSI兼容的首先写入null的方法。
– a_horse_with_no_name
2014年9月24日19:07
@a_horse_with_no_name在我的情况下很有用,因为如果值不为null,我想忽略该值,然后改为按另一列排序。 (我对通知进行排序-首先看不见(然后seeAt为null),但是如果看到,那么我将按createdAt instaed进行排序)
– KajMagnus
15年12月22日在22:16
同意;当我只想按一个值是否存在(在这种情况下是一个日期)进行排序,然后再按另一个值进行排序时,我发现这很有用。如果该值非空,则NULLS FIRST仍按实际值排序。这对我有用。谢谢!
– Ben Kreeger
16年1月8日在17:12
评论
以防万一:postgresql.org/docs/9.0/static/queries-order.html