¿Cómo agrupo por más de una columna?

Hola

¿Cómo puedo agrupar por más de una columna?

Si agrupo sólo por una columna

@horas = Actividad.sum(:acti_esfuerzo, :group => :proyecto)

el sql que resulta es:

SELECT sum(acti_esfuerzo) AS sum_acti_esfuerzo, proyecto_id AS
proyecto_id FROM actividad GROUP BY proyecto_id

donde puedo buscar de esta forma:

for proyecto in @proyectos
@horas[proyecto.proyecto_id]

pero si quiero agrupar por dos columnas:

@horas = Actividad.sum(:acti_esfuerzo, :group => ‘proyecto_id,
acti_fecha’)

el sql que resulta es:

SELECT sum(acti_esfuerzo) AS sum_acti_esfuerzo, proyecto_id, acti_fecha
AS proyecto_id_acti_fecha FROM actividad GROUP BY proyecto_id,
acti_fecha

noten el alias “proyecto_id, acti_fecha AS proyecto_id_acti_fecha”
dentro del select

donde @horas == [[“2007-04-02”, 14.8], [“2007-03-08”, 0.5],
[“2007-04-03”, 15.3], [“2007-01-04”, 6.75]]

¿Por qué en el resultado no aparece el proyecto_id?

Buenas.

Hace algún tiempo me pelee precisamente con este tema y la conclusión
después de varias pruebas y de darle vueltas al código de AR es que
en :group se espera una sola columna (o una asociación). Puedes
ponerle más y ‘cuela’ en el group by (en el fondo se hace un options
[:group].to_s), pero al montar las columnas que van en el select se
asume que es una sola, así que no hay manera de que AR te devuelva al
sum y más de una columna ‘agrupada’.
Si quieres echarle una ojeada (igual ves más cosas que yo y resulta
que se puede parchear fácilmente), el montaje está en active_record/
calculations.rb

Saludos

El 17/04/2007, a las 6:45, Jean D. escribió:

SELECT sum(acti_esfuerzo) AS sum_acti_esfuerzo, proyecto_id AS
@horas = Actividad.sum(:acti_esfuerzo, :group => 'proyecto_id,
dentro del select
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Andrés Cirugeda E.
ASPgems
Email: andres at aspgems dot com

‘All we have to decide is what to do with the time that is given to us’.
–Gandalf.