2013-11-28 62 views
3

什麼是活動記錄/ Ruby來執行這個查詢on Rails的與集團一起將​​集合函數總和

SELECT sum(amount) as total_amount FROM payments GROUP BY person_id, product_id

我似乎鏈sum不能group方法的最佳途徑。我必須在這裏使用find_by_sql嗎?

+0

'Payment.group(「person_id,product_id」)。sum(「amount」)'。我認爲sum方法接受一個group_by選項,但我不確定是否可以將它與多個列定義一起使用。 – lolski

回答

6

喜歡的東西:

Payment.group(:person_id).group(:product_id).sum(:amount) 

應該給你一個哈希的鍵是[person_id, product_id]陣列,其值的總和。你可能不想:

Payment.group('person_id, product_id').sum(:amount) 

雖然,這可能會給你正確的總和,但哈希鍵沒有多大意義。

你也可以說:

Payment.sum(:amount, :group => 'person_id, product_id') 

,但將遭受作爲Payment.group('person_id, product_id').sum(:amount)確實按鍵相同的腦損傷;然而,對於:group陣列:

Payment.sum(:amount, :group => [ :person_id, :product_id ]) 

應該產生與數組鍵相同的哈希作爲雙.group版本。但是,在Rails4中已棄用sum:group格式(感謝Ganeshwara Herawan Hananda Put注意到這一點)。

上面的工作在Rails3中很好,我看不出它在Rails4中不能工作的原因。我沒有方便的Rails4設置,所以我無法驗證。

+0

從頭痛的幾個小時內挽救了我。我用最後一個順便說一句。 – lolski

+0

似乎在ActiveRecord的未來版本中需要進行調整:「拒絕警告:關係#計算查找器選項已被棄用」 – lolski

+1

Payment.group(:person_id).group(:product_id).sum(:amount) '? –