使用Rails 5,使用PostgreSQL。
我想做什么:
我有Service
模型,有created_at
和base_price
属性。
我想按照创建日期订购它们,但如果基本价格是nil
,那么请将它们保留在底部,同时按创建顺序排列。
我尝试过这样的事情:
Service.order('created_at DESC, base_price NULLS LAST')
但这并没有实现我想要的。
任何帮助将不胜感激。我知道有一个类似的问题,但没有解释,我很难实现它。 谢谢!
答案 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)