ruby-on-rails – PG :: GROUP BY子句中的错误

ruby-on-rails – PG :: GROUP BY子句中的错误,第1张

概述我想不出更好的方法来重构下面的代码(见 this question),虽然我知道它非常难看.但是,它会抛出一个Postgres错误(不是SQLite): ActiveRecord::StatementInvalid: PG::Error: ERROR: column "articles.id" must appear in the GROUP BY clause or be used in 我想不出更好的方法来重构下面的代码(见 this question),虽然我知道它非常难看.但是,它会抛出一个Postgres错误(不是sqlite):

ActiveRecord::StatementInvalID: PG::Error: ERROR:  column "articles.ID" must appear in the GROUP BY clause or be used in an aggregate function

查询本身是:

SELECT "articles".* FROM "articles" WHERE "articles"."user_ID" = 1 GROUP BY publication

哪个来自以下视图代码:

=@user.articles.group(:publication).map do |p|  =p.publication  =@user.articles.where("publication = ?",p.publication).sum(:twitter_count)  =@user.articles.where("publication = ?",p.publication).sum(:facebook_count)  =@user.articles.where("publication = ?",p.publication).sum(:linkedin_count)

在sqlite中,这给出了输出(例如)NYT 12 18 14 BBC 45 46 47 CNN 75 54 78,这正是我所需要的.

如何改进代码以消除此错误?

解决方法 克雷格的回答很好地解释了这个问题. Active Record将默认选择*,但您可以轻松覆盖它:

@user.articles.select("publication,sum(twitter_count) as twitter_count").group(:publication).each do |row|  p row.publication # "BBC"  p row.twitter_count # 45end
总结

以上是内存溢出为你收集整理的ruby-on-rails – PG :: GROUP BY子句中的错误全部内容,希望文章能够帮你解决ruby-on-rails – PG :: GROUP BY子句中的错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1250315.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存