Rails按多列分组

13
我有一个 budgets 表,其中包括 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个回答

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 }

2
对于更高版本的Rails(>=3.2),请使用Budgets.select("emptype_id, calendar_id, sum(budgets.actual_head) AS sum_actual_head").group("emptype_id, calendar_id"),因为find只适用于ids。 - amoebe

6

我作弊了。执行:group => ["emptype_id,calendar_id"]

虽然你和我都不想这样做,但至少这个方法是有效的。


3

我不确定这个,但可以尝试使用:group => [:emptype_id, :calendar_id]


嗨,那个不起作用,会抛出下面的错误;嗯,没有办法按两列分组吗?"ActiveRecord :: StatementInvalid:Mysql :: Error:在“字段列表”中未知的列'emptype_idcalendar_id':SELECT sum(budgets。actual_head)AS sum_actual_head,emptype_idcalendar_id AS emptype_idcalendar_id FROM budgets GROUP BY emptype_idcalendar_id" - philipth
2
这对我在Rails 3.0.x上有效:Evaluation.average(:score, :group => [:person_id, :category]) - Paul Schreiber
它会抛出一个错误。如果我们运行这段代码,Active Record 将把这些列名解析为单词,例如 emptype_id 和 calendar_id。 - Sobin Sunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接