philipth
philipth

Reputation: 276

rails group by multiple columns

i have budgets table with emptype_id and calendar_id actual_head, estimated_head

when i do Budgets.sum(:actual_head ,:group=>"emptype_id,calendar_id") i do not get the result grouped by the above two columns but only by the emptype_id

however when i check the log the sql query is right

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

has 103 rows

I wanted to iterate through each emptype_id and calendar_id to get a sum of actual_head and do some calculations on it.

Upvotes: 13

Views: 38377

Answers (3)

Ben
Ben

Reputation: 61

I cheat. Do :group => ["emptype_id,calendar_id"].

Not want you nor I want, but this works at least.

Upvotes: 6

Lawrence Pit
Lawrence Pit

Reputation: 521

Grouping with multiple columns cannot be supported by rails. You have to use a regular find all:

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 }

Upvotes: 10

Matt Grande
Matt Grande

Reputation: 12157

I'm not sure of this, buy try :group => [:emptype_id, :calendar_id]

Upvotes: 3

Related Questions