首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按平均评级排序的:highest_rated范围

按平均评级排序的:highest_rated范围
EN

Stack Overflow用户
提问于 2011-07-10 22:25:20
回答 1查看 2.2K关注 0票数 3

我有一个Product和每个产品的has_many ratings。我正在尝试创建一个:highest_rated产品范围,它根据产品的最高平均评级对产品进行排序(每个评级都在ratings表中)。我试过这个:

代码语言:javascript
复制
scope :highest_rated, includes(:ratings).order('avg(ratings.rating) DESC')

但这给了我一个misuse of aggregate: avg()错误。

关于如何根据最高平均评分订购我的产品,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-10 22:41:57

这是可行的:

代码语言:javascript
复制
scope :highest_rated, includes(:ratings).group('product_id').order('AVG(ratings.rating) DESC')

要仅获取具有现有评级的产品:

代码语言:javascript
复制
scope :highest_rated, includes(:ratings).group('product_id').where('ratings.rating IS NOT NULL').order('AVG(ratings.rating) DESC')

编辑:以上内容在PostgreSQL中不起作用。我使用的是这个(它在SQLite和PostgreSQL中都有效):

代码语言:javascript
复制
scope :highest_rated, where("products.id in (select product_id from ratings)").group('products.id, products.name, products.all_other_fields').joins(:ratings).order('AVG(ratings.rating) DESC')
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6641631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档