В ruby ​​on rails возможно ли выполнить запрос суммы с группой, используя пакетную обработку find_each? - PullRequest
2 голосов
/ 19 мая 2010

Я загружаю данные из своей базы данных, и я делаю подсчет суммы с группой по.

ElectricityReading.sum(:electricity_value, :group => "electricity_timestamp", :having => ["electricity_timestamp = '2010-02-14 23:30:00'"])

Мои наборы данных очень велики, 100 тыс. И более, поэтому мне было интересно, возможно ли использовать find_each для пакетной обработки, чтобы помочь с нехваткой памяти.

Я могу написать дозирование вручную, используя лимит и смещение, я думаю, но я бы хотел избежать этого, если код уже существует.

1 Ответ

0 голосов
/ 03 июня 2010

С http://railsforum.com/viewtopic.php?pid=88198#p88198

@categories = Categories.find(:all, :joins => :animals,
                          :select => "categories.*, SUM(animals.weight) as weight_sum",
                          :group => "categories.id")
# ATTENTION: weight_sum is now a temporary attribute of the categories returned!
# and the animals are NOT eager-loaded`
<% @categories.each do |c| %>
  Category: <%= c.name %><br />
  Sum of Weight in this category: <%= c.weight_sum %><br />
<% end %>

Это не ActiveRecord.sum, но должно сработать.

...