按列中的零值排序

时间:2015-03-25 14:50:45

标签: ruby-on-rails sql-order-by

我有一个列position的表,在某些情况下,对于某些记录集合可以是nil。我有默认的订单选项,如 order('positions ASC')

id| name | position
1    5       null
2    6       null
3    7       null

如果对于我排序的某些集合(上面的示例),所有值都在null位置column,我将从db获取此集合的顺序? 我建议我按照id(1,2,3)的顺序收集。我是对的吗?

增加#1:数据库 - Postgresql

2 个答案:

答案 0 :(得分:2)

根据Postgres manual,如果没有排序子句,则根据磁盘上的物理位置返回记录。它对排序字段中具有相同值的排序记录没有任何说明。但是,它使用b-tree,并且像clasic数据库管理器一样,它必须返回存储在b-tree中的顺序。您必须期望对db重组进行每次更改。

最后,对排序字段中具有相同值的记录的顺序没有保证。

注意:使用Postgres,您可以在第一个或最后一个处创建NULL值(在referrer链接中详细说明)。

this相关问题上,我同意@macek。

答案 1 :(得分:1)

你可以这样做。

猫:

id| name | position
1    5       null
2    6       null
3    7       not_null

nil     = Cat.order("id ASC").where(position: nil) = [1, 2]
not_nil = Cat.order("id ASC").where("position is not null") = [3]

not_nil + nil = [3, 1, 2]

这保留了订单。