2009-08-06 74 views
12

我有emptype_id和CALENDAR_ID actual_head預算表,estimated_head軌道組由多個列

當我這樣做Budgets.sum(:actual_head ,:group=>"emptype_id,calendar_id")我沒有得到通過上述兩列,而是僅僅由emptype_id

然而,當分組結果我檢查日誌SQL查詢是正確

SELECT sum(`budgets`.actual_head) AS sum_actual_head, emptype_id,calendar_id AS emptype_id_calendar_id FROM `budgets` GROUP BY emptype_id,calendar_id 

有103行

我想通過迭代每個emptype_id和calendar_id獲得actual_head的總和,並對其進行一些計算。

回答

3

我不知道這一點,買儘量:group => [:emptype_id, :calendar_id]

+0

嗨,這不工作拋出下面的錯誤;嗯是有沒有辦法按兩列 「的ActiveRecord :: StatementInvalid的:mysql ::錯誤:未知列在 '字段列表' emptype_idcalendar_id「:SELECT SUM('預算 s'.actual_head)AS sum_actual_head,emptype_idcalendar_id AS emptype_idcalendar_id FROM'budgets' GROUP BY emptype_idca lendar_id「 – philipth 2009-08-06 20:57:34

+2

這適用於我的Rails 3.0.x:'Evaluation.average(:score,:group => [:person_id,:category])''。 – 2011-11-28 04:50:01

+0

它會通過一個錯誤。如果我們運行這個代碼,活動記錄會將這些列名解析爲單個單詞,如emptype_idcalendar_id – 2015-10-28 12:22:44

10

多列分組不能軌支持。你必須使用一個普通的找全部:

budgets = Budgets.find(:all, 
         :select => "emptype_id, calendar_id, sum(budgets.actual_head) AS sum_actual_head", 
         :group => "emptype_id, calendar_id") 

budgets.each { |budget| puts budget.sum_actual_head } 
+1

對於更新版本的rails(> = 3.2),使用'Budgets.select(「emptype_id,calendar_id,sum(budgets.actual_head)AS sum_actual_head」) .group(「emptype_id,calendar_id」)'因爲find只能用於id。 – amoebe 2015-02-01 12:37:50

5

我作弊。做:group => ["emptype_id,calendar_id"].

不想你也不想我,但至少這個作品。