我有一些查询语句,我想通过基本上做top_level_comment_count.fdiv(code_review_assigned_count).round(2)
以下是我的2个查询语句:
top_level_comment_count = CrucibleComment.group(:user_id).where(parent_comment_id: nil).count
code_review_assigned_count = Reviewer.group(:user_id).count
这两个都返回如下内容:
40=>5,
41=>1,
43=>4,
44=>10,
45=>2,
46=>13,
48=>7,
50=>7,
51=>6,
52=>5,
54=>7,
55=>41,
56=>2,
58=>21,
60=>7,
61=>8,
62=>3,
63=>1,
所以,我想要做的是:如果:user_ids是相同的,取平均值。 我的def目前看起来像这样:
def self.average_top_level_comments
a = CrucibleComment.group(:user_id).where(parent_comment_id: nil).count
b = Reviewer.group(:user_id).count
end
换句话说,我想做这个陈述:
return nil unless code_review_assigned_count && top_level_comment_count
top_level_comment_count.fdiv(code_review_assigned_count).round(2)
一组数字。我怎么能这样做?
For example:
id:40 => 5.0/3.3
id: 41 => 1/2.2
id: 43 => 4 /1.0
答案 0 :(得分:0)
我建议使用inject。
像:
division_result = top_level_comment_count.inject({}) do |result, item|
id = item.first
count = item.last
result[id] = count.to_f / code_review_assigned_count[id]
result
end
这将返回一个散列,其中ID作为键,分区的结果作为值。