回答

收藏

按ASC列排序,但先使用NULL值?

技术问答 技术问答 203 人阅读 | 0 人回复 | 2023-09-13

我需要按日期/时间字段(例如)升序对PostgreSQL表进行排序last_updated。$ W8 J+ ]/ Q$ ^4 ~1 y0 w5 ^
但是,该字段允许为空或空,我想与空记录last_updated来之前,非空last_updated。
* s4 H6 c0 T& ?% |  X这可能吗?
2 v& ^( B2 J  oorder by last_updated asc  -- and null last_updated records first ??1 ?% s9 N/ j8 P4 B. v  Q
                & T. N% y) Z) T  r
解决方案:7 l* |  l# n3 U7 A- e6 e
                ' O* c, t! X3 u* m2 k4 X
2 R' ]* F, m, F
$ g' z/ S1 d* l8 C4 M
                PostgresNULLS FIRST | LAST为该ORDER BY子句提供了关键字,以完全满足该需求:* q+ G% x- }& C" B5 q
... ORDER BY last_updated NULLS FIRST" D' D0 P* b! ^' O) o- z
5 o+ K( X! V. z' B! d5 H
一个典型的用例是使用降序排序(DESC),它会生成默认的升序(ASC)的完整反转,首先是空值。通常不理想-因此,将null值保持在最后:
! ~$ m' w0 u6 @' y; P3 R... ORDER BY last_updated DESC NULLS LAST
- A; X5 g8 T9 u
$ _  P/ F& r& j6 H) j2 {4 |6 ], Q" L8 E要支持带有索引的查询,请使其匹配:
2 H4 v/ O6 k6 }CREATE INDEX foo_idx ON tbl (last_updated DESC NULLS LAST);
/ ^8 c, L  G9 z# y2 \- Q& e& I! ~: M9 w. K
Postgres可以向后读取btree索引,但是在附加NULL值的地方很重要。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则