【问题标题】:Rails 5 - Ordering by created_at but show nulls last of another columnRails 5 - 按 created_at 排序,但在另一列的最后显示空值
【发布时间】:2018-05-09 20:39:20
【问题描述】:

在 PostgreSQL 中使用 Rails 5。

我想做什么:

我有一个Service 模型,具有created_atbase_price 属性。

我想按创建日期订购,但如果底价是nil,则将它们放在底部,同样按创建日期订购。

我尝试过这样的事情:

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

但这并没有达到我想要的效果。

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

【问题讨论】:

  • 编辑您的帖子并显示您使用的数据库类型。 SQLite? MySQL?
  • @phlip PostgreSQL,道歉

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


【解决方案1】:

使用 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')

【讨论】:

    【解决方案2】:

    试试下面的方法

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多