rails列由多列组成

phi*_*pth 12 sql activerecord ruby-on-rails

我有预算表与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
Run Code Online (Sandbox Code Playgroud)

有103行

我想遍历每个emptype_id和calendar_id以获得actual_head的总和并对其进行一些计算.

小智 10

rails不支持使用多列进行分组.你必须使用常规查找全部:

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 }
Run Code Online (Sandbox Code Playgroud)

  • 对于最新版本的rails(> = 3.2),请使用`Budgets.select(“ emptype_id,calendar_id,sum(budgets.actual_head)AS sum_actual_head”)。group(“ emptype_id,calendar_id”)`,因为find仅适用于id。 (2认同)

小智 5

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

不想要你,也不想要,但这至少起作用.


Mat*_*nde 3

这个不太清楚,买来试试:group => [:emptype_id, :calendar_id]

  • 这适用于 Rails 3.0.x:`Evaluation.average(:score, :group => [:person_id, :category])`。 (2认同)