Postgresql 具有空值的自定义排序
我有一个DataMapper类Song(通过PostgreSQL)具有以下属性:Postgresql 具有空值的自定义排序,postgresql,datamapper,ruby-datamapper,Postgresql,Datamapper,Ruby Datamapper,我有一个DataMapper类Song(通过PostgreSQL)具有以下属性: property :rating, Float, :required => false 用户可以给歌曲评分。 问题是,我希望用户通过分级来浏览可用歌曲。假设我有5首歌,其中3首已经被评级,然后是这样的: Song.all(:order => [:rating.desc]) 将按以下顺序为我提供歌曲:{null,null,10,7,6}或其他。有没有一种简单的方法可以将这些空值放到排序的底部,这样我的
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)
但这会合并查询,因此我的resultset为nil
当然,另一种选择是将空评级默认为-1,但由于一些限制,如果可能的话,我宁愿避免这种情况。您可以在
ORDER BY
子句中指定null
的位置。看看这个。我不确定在datamapper中,但是sql将是这样的
选择“按排序从表中选择表达式顺序列表”\u expression DESC NULLS LAST
您正在连接的数据库是什么?MySQL认为空值比任何其他值都小,它显示的顺序类似于{10,7,6,NULL,NULL}
。