我有一个包含以下列的模型
Date
fee
discount
1/1/15, 1, 1
1/1/15, 2, 1
2/2/15, 3, 3
我有一些像this_year这样的命名范围
我想做一些像Charges.this_year.summed_up
这样的事情如何为此创建命名范围。
1/1/15, 3, 2
2/2/15, 3, 3
答案 0 :(得分:0)
假设您的模型具有日期字段(例如published_at)和2个整数字段(例如费用,折扣)。您可以使用“group”方法在published_at上运行GROUP BY。如果您只想要一个字段的总和,那么只需使用sum
方法。如果需要多个字段,则必须在其中运行带有SQL SUMs的select,以获得多个列总和。这是一个例子。
Charge..group(published_at)
.select("published_at, SUM(fee) AS sum_fee, SUM(discount) AS sum_discount")
.order("published_at")
注意:汇总字段不会显示在rails控制台返回值提示中。但它们可供您使用。
答案 1 :(得分:0)
根据您想要的最终结果,您可能需要查看.group(:attribute)
而不是.group_by
:
Charge.group(:date).each do |charge|
charge.where('date = ?', charge.date).sum(:fee)
charge.where('date = ?', charge.date).sum(:discount)
end
我发现这种方法更容易,特别是如果要为要从表中提取的数据设置多个条件。
无论如何,我有一个会计模型,提出了这种问题,我需要在一张桌子上使用信用卡和借记卡以及付款信息类型,并花了几个小时学习所有关于group_by
的问题,然后才意识到这一点.group()
提供了一个简单的解决方案。