2009-08-06 75 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"].

不想你也不想我,但至少这个作品。