如何将一个关联中的所有“总”列相加?
我的SQL-fu糟透了,所以我想学习如何使用Active Record for my rails 2.3.5应用程序(所以没有花哨的语法,请讨好;-)而且我在使用MySQL。
让我说我有:
Shop
has_many :customers
has_many :transactions, :through => :customers
非常正常。
shop = Shop.first
shop.transactions
=> 100
好的,问题的所有背景:
我希望在过去一年(2010年1月1日,2010年12月31日)的交易中汇总total
列并按客户显示。
虽然我知道如何对事务进行分组并找到条件,但这是我缺乏SQL的总和部分让我失望。
first = Date.new(2010, 01, 01)
last = Date.new(2010, 12, 31)
shop.transactions(:conditions => {:created_at => first..last}, :group => :customer_id, :include => sum(:total))
我只是刺了一下,我是在正确的轨道上吗?
答案 0 :(得分:8)
shop.transactions.sum(:total, :conditions => {:created_at => first..last}, :group => :customer_id)
这看起来更简单。我现在知道sum也可以采用AR属性。凉爽。
答案 1 :(得分:0)
查看收集方法。
您可以执行以下操作:
transactions = Shop.transactions
total = 0
sum = transactions.collect{|i| total+=i.transaction.amount}
将金额替换为包含交易金额的财产。
你也可以使用.sum
sum = transactions.to_a.sum(&:amount)