ruby on rails 3 - Bound activerecords-queries using aggregate funcs (sum, avg,...) with limit -
given pseudo-query:
model.sum(:column, :condition => ['id = ?', id], order => "date desc", :limit => x)
here have problem sum obtained not "limited" value x (it takes sum values on column instead sum of x (firsts) entries).
it seems limit
taken after calculating aggregate func sum
.
how can sum limited firsts x entries?
murifox's suggestion doesn't work because limit
applies final result set, has 1 row (the sum). see this thread.
the simplest way solve not count in database:
model.where(:id => id).order('date desc').limit(3).pluck(:column).compact.sum
this loads values of column
ruby , sums there. now, if set of records enormous, observably less efficient, because values getting loaded app's memory.
edit: added .compact
- remove nils array before summing (which causes error).
the suggested method of doing in sql using subquery, so:
select sum(subquery.column) ( select * models id = 5 limit 3 ) subquery;
there's not easy or straightforward way turn activerecord query, since expect selecting particular model's table.
Comments
Post a Comment