line_chart @product.stocks.group_by_date(:date).sum(:quantity)
这项工作正常,但我收到了错误的数据,因为在stocks
表中,quantity
取决于另一列stock_in
boolean
。< / p>
quantity
无法存储为负数,只支持正数。quantity
时,我们检查stock_in
布尔值以计算产品数量的总和product_id | quantity | stock_in | date
1 32 true 13-06-2015
1 8 true 13-06-2015
1 10 false 13-06-2015
此处的数量以这种方式计算:32 + 8 - 10 = 30
使用时
line_chart @product.stocks.group_by_date(:date).sum(:quantity)
日期13-06-2015的数量总和为40,这是错误的
我该如何解决?类似的东西:
line_chart @product.stocks.group_by_date(:date).sum { |s| s.stock_in? ? s.quantity : -1 * s.quantity }
答案 0 :(得分:2)
如果你想在PostgreSQL(而不是rails应用程序)中执行总和,你可以这样做:
line_chart @product.stocks
.group_by_date(:date)
.sum("quantity * (case stock_in when TRUE then 1 else -1 end)")
答案 1 :(得分:1)
您可以尝试以下操作:
@product.stocks.group_by_date(:date)
.sum("case when stock_in then quantity else -quantity end")