需要一个postgresql查询,在非null值之后返回null值

Sal*_*lil 3 postgresql ruby-on-rails sql-order-by

需要一个postgresql查询,它在非null值的末尾返回null值,而不管Ascending/Descending Order.

例如: - 我有一栏说buy_price的值为1,5,3,0,null,null

然后ORDER BY purchase_price ASC它应该返回

0
1
3
5
null
null
Run Code Online (Sandbox Code Playgroud)

并且ORDER BY purchase_price DESC它应该返回

5
3
1
0
null
null
Run Code Online (Sandbox Code Playgroud)

我需要概括的解决方案,我可以能够申请其中'boolean','float','string','integer','date'数据类型

Den*_*rdy 5

order by支持nulls first/last.默认asc获取nulls last并desc获取nulls first.您可以为每列重写它们:

order by col1 desc nulls last, col2 desc nulls first, etc
Run Code Online (Sandbox Code Playgroud)

关于此的一个额外注释:根本原因是它们被置于btree索引末尾的空值.在PostgreSQL 9.0中,order by col desc nulls last优化了将索引扫描分成两部分(反向扫描非空行,后跟空行).添加它的原始版本不是这种情况(如果内存服务,则为8.4); 后者继续对整个表进行seq扫描,然后进行快速排序.旧版本根本不支持该功能.因此,除了最新版本的PostgreSQL之外,要小心使用它.