jean
1
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?
jean
2
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.