使用activerecord / pgsql计算分组平均值

时间:2016-05-29 15:20:44

标签: sql ruby-on-rails postgresql activerecord

我有一个简单的comments表:

id    post_id
=======================
1     'a11'
2     'a11'
3     'b22'
4     'b22'
5     'b22'

我计算每篇文章的平均评论次数:

comment_counts = Comment.group(:post_id).count.values
avg = comment_counts.sum / comment_counts.size.to_f
# => 2.5

我更愿意让DB处理计算。如何仅使用activerecord / sql实现此目的?

1 个答案:

答案 0 :(得分:0)

我无法想到一种非常ActiveRecord-ish的做法,但可以提供以下内容:

Comment(:post_id).select("avg(count(*)) over () avg").take.avg

...返回BigDecimal,或者可能更有效:

ActiveRecord::Base.connection.execute("select avg(c_star) from (select count(*) c_star from comments group by post_id) t").first["avg"].to_d

但是,我发现这并没有考虑到没有收到任何评论的帖子。