我有一个简单的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实现此目的?
答案 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
但是,我发现这并没有考虑到没有收到任何评论的帖子。