mhd*_*mhd 69 sql postgresql null sql-order-by
我需要按日期/时间字段对PostgreSQL表进行排序,例如last_updated
.
但是,该字段允许为空或空,我想与空记录last_updated
来之前,非空last_updated
.
这可能吗?
order by last_updated asc /* and null last_updated records first ?? */
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 137
PostgreSQL提供了NULLS FIRST | LAST
该ORDER BY
子句的关键字,以满足该需求:
... ORDER BY last_updated NULLS FIRST
Run Code Online (Sandbox Code Playgroud)
甲典型的使用情况是与降序排序(DESC
),其产生所述默认升序(完全反转ASC
)与第一空值.通常不可取 - 所以,最后保持空值:
... ORDER BY last_updated DESC NULLS LAST
Run Code Online (Sandbox Code Playgroud)
要使用索引支持查询,请使其匹配:
CREATE INDEX foo_idx ON tbl (last_updated DESC NULLS LAST);
Run Code Online (Sandbox Code Playgroud)
Postgres可以向后读取btree索引,但重要的是附加NULL值.
您可以使用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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38306 次 |
最近记录: |