2010-05-19 18 views
2

Je charge des données de ma base de données et je fais un calcul de somme avec un groupe par.En ruby ​​on rails, est-il possible de faire une requête somme avec un groupe en utilisant le batch find_each?

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

Mes ensembles de données sont extrêmement importantes, 100k j'étais vers le haut si son demandent si possible d'utiliser le find_each pour ce lot pour aider les frais généraux de mémoire.

Je peux écrire le dosage en utilisant manuellement la limite et le décalage je suppose mais je voudrais éviter cela si le code existe déjà.

Répondre

0

De 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 %> 

Il n'est pas ActiveRecord.sum, mais il devrait faire l'affaire.