我有一个架构,我想计算“平均结账时间”。即图书have_many
check_outs。 check_out将包含type
和time
列。
我想找到相应类型in
和out
之间每本书的平均结帐时间。我对分组查询有点新意。我已经在控制台上摆弄了一段时间,但无济于事。我可以做基本的分组,但不知道如何查询效率。
我相信这是一个简单的问题,但如果复杂请提出建议。
我目前的想法是:
答案 0 :(得分:0)
我想你想要这样的东西:
CheckOut.group(:book_id).average('check_out - check_in')
这相当于平均check_out - 平均check_in,如下所示:
CheckOut.group(:book_id).average(:check_out) - CheckOut.group(:book_id).average(:check_in)
我不确定哪个查询会更有效率,但我会猜测前者。
答案 1 :(得分:0)
因为签出和签入都是单独的记录,我认为你需要单独取出它们,就像上面的第二个选择一样。此外,我意识到答案没有意义,因为它计算两个数据集之间的差异。所以,你真的想要这样的东西:
check_outs = Check.where(check_type: :check_out).group(:book_id).average(:time)
check_ins = Check.where(check_type: :check_in).group(:book_id).average(:time)
我认为这些将是key_id上的哈希键,因此您可以遍历列表并获取值:
times = {}
check_ins.each_with_index do |v, i|
times[i] = v - check_outs[i]
end
这里还有一个问题,那就是如果一本书目前已经签出,那么它就不会有check_in记录,而且它会甩掉平均值。