ruby-on-rails – GroupingError:ERROR:列必须出现在GROUP BY子句中或在聚合函数中使用

我的控制器中的代码是按照最高的平均评价等级排列相册(从该解决方案 How to display highest rated albums through a has_many reviews relationship使用的代码):
@albums = Album.joins(:reviews).select("*,avg(reviews.rating) as average_rating").group("albums.id").order("average_rating DESC")

这个代码在我的开发环境(sqlite3)中完美工作,但是当我将代码推送到heroku和postgresql时,我得到了这个错误:

PG::GroupingError: ERROR:  column "reviews.id" must appear in the GROUP BY clause or be used in an aggregate function

我意识到这是一个相当普遍的问题,我对SQL没有经验,所以我无法重构代码,因此它可以在我的开发和生产环境中工作.

解决方法

您不能选择reviews.id(通过通配符*隐式选择),而不将其添加到GROUP BY子句或应用像avg()的聚合函数.解决方案是执行以下操作之一:

>从您的选择中删除通配符*
>将字段reviews.id添加到您的组子句
>选择review.id明确地应用聚合函数(例如sum(reviews.id))
>替换通配符*与表特定的通配符相册*

第二和第三个选项在您的方案中并没有多大意义.根据您的评论,我添加了四个选项.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...