我已经有了一个有效的解决方案,但我真的很想知道为什么这行不通:
ratings = Model.select(:rating).uniq
ratings.each { |r| puts r.rating }
它选择,但不打印唯一值,而是打印所有值,包括重复的值。它在文档中:http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields
我已经有了一个有效的解决方案,但我真的很想知道为什么这行不通:
ratings = Model.select(:rating).uniq
ratings.each { |r| puts r.rating }
它选择,但不打印唯一值,而是打印所有值,包括重复的值。它在文档中:http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields
当前回答
用sql收集uniq列的另一种方法:
Model.group(:rating).pluck(:rating)
其他回答
Model.pluck("DISTINCT column_name")
如果有人想在蒙古人身上找到同样的东西,那就是
Model.distinct(:rating)
如果你还想选择额外的字段:
Model.select('DISTINCT ON (models.ratings) models.ratings, models.id').map { |m| [m.id, m.ratings] }
在我的场景中,我希望根据创建日期对不同的名称进行排序,并应用offset和limit。基本上是ORDER BY和DISTINCT ON的组合
你所需要做的就是在拔拔方法中设置DISTINCT ON,就像下面这样
模型。order("name, created_at DESC").offset(0).limit(10)。pluck("DISTINCT ON (name) name")
这将返回一个不同名称的数组。
Model.select(:rating).distinct