加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 01:47:09 所属栏目:百科 来源:网络整理
导读:我想不出更好的方法来重构下面的代码(见 this question),虽然我知道它非常难看.但是,它会抛出一个Postgres错误(不是SQLite): ActiveRecord::StatementInvalid: PG::Error: ERROR: column "articles.id" must appear in the GROUP BY clause or be used in a
我想不出更好的方法来重构下面的代码(见 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 # 45
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读