2009-08-06 40 views
12

tengo mesa de presupuestos con emptype_id y actual_head calendar_id, estimated_headrieles grupo por varias columnas

cuando lo hago Budgets.sum(:actual_head ,:group=>"emptype_id,calendar_id") Yo no obtener el resultado agrupado por las dos columnas anteriores, pero sólo por el emptype_id

sin embargo cuando i compruebe el registro de la consulta SQL es correcto

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 

tiene 103 filas

que quería recorrer cada emptype_id y calendar_id para obtener una suma de actual_head y hacer algunos cálculos en él.

Respuesta

3

No estoy seguro de esto, comprar tratar :group => [:emptype_id, :calendar_id]

+0

hola, eso no funciona arroja el siguiente error; hmm no hay una forma de agrupar por dos columnas "ActiveRecord :: StatementInvalid: MySQL :: Error: Desconocido columna 'emptype_idcalendar_id' en 'lista de campos': SELECT sum (' presupuesto s'.actual_head) AS sum_actual_head, emptype_idcalendar_id AS emptype_idcalendar_id FROM 'presupuestos' GROUP BY emptype_idca lendar_id" – philipth

+2

Esto funciona para mí con Rails 3.0.x: 'Evaluation.average (: score,: group => [: person_id,: category])'. –

+0

Aparecerá un error. Si ejecutamos este código, el registro activo analizará el nombre de esta columna como una sola palabra como emptype_idcalendar_id –

10

Agrupación con varias columnas no puede ser soportado por los carriles. Tienes que usar un encontrar todos regularmente:

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

Para versiones más recientes de rieles (> = 3.2) use 'Budgets.select (" emptype_id, calendar_id, sum (budgets.actual_head) AS sum_actual_head ") .group ("emptype_id, calendar_id") 'ya que find solo funciona con ids. – amoebe

5

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

No te quiero ni quiero, pero esto funciona al menos.