使用NULL值自定义排序

时间:2012-11-05 21:57:13

标签: postgresql datamapper ruby-datamapper

我有一个DataMapper类Song(通过PostgreSQL),它具有以下属性:

property :rating, Float, :required => false

用户可以为歌曲评分。 问题是我希望用户通过评级浏览可用的歌曲。说我有5首歌曲,其中3首已被评级,然后是这样的:

Song.all(:order => [:rating.desc])

会按以下顺序给我听歌:{null,null,10,7,6}或其他什么。有没有一种简单的方法可以将这些空值放到排序的底部,这样我的结果看起来就像{10,7,6,null,null}。

我试过

Song.all(:rating.not => nil, :order => [rating.desc]) + song.all(:rating => nil)

但这结合了查询,使得我的结果集为nil。

另一种选择当然是将null评级默认为-1,但由于某些限制,我宁可避免这种情况。

1 个答案:

答案 0 :(得分:2)

您可以在NULl子句中指定ORDER BY的位置。检查此Sorting Rows。我不确定datamapper但是sql会像这样

SELECT select_list FROM table_expression ORDER BY sort_expression DESC NULLS LAST