Rails 5 - 按created_at排序,但在另一列的最后显示空值

时间:2018-05-09 20:39:21

标签: sql ruby-on-rails ruby ruby-on-rails-5

使用Rails 5,使用PostgreSQL。

我想做什么:

我有Service模型,有created_atbase_price属性。

我想按照创建日期订购它们,但如果基本价格是nil,那么请将它们保留在底部,同时按创建顺序排列。

我尝试过这样的事情:

Service.order('created_at DESC, base_price NULLS LAST')

但这并没有实现我想要的。

任何帮助将不胜感激。我知道有一个类似的问题,但没有解释,我很难实现它。 谢谢!

2 个答案:

答案 0 :(得分:3)

使用case语句将所有base_price非null指定为1,将所有base_price null指定为2,以便将它们排序为两个组1和2.在组中,您可以按created_at降序排序。

Service.order('CASE WHEN base_price IS NULL THEN 2 ELSE 1 END, created_at DESC')

答案 1 :(得分:1)

尝试以下内容

SELECT field1, field2,
  CASE
    WHEN base_price IS NOT NULL THEN 1
    ELSE 0
  END 
  AS field3
FROM services
ORDER BY (field3 DESC, created_at DESC)