MySQL - How to “SUM” in a :has_many case

Hi there,

I have the following tables...

  User :has_many Purchases   Item :has_many Purchases

...where Item has a column "amount" (can be + or -) and I need to find all Users that have a positive SUM of "amounts" (over all Purchases each one has made).

How does this query look like? (I'm not sure how to handle "SUM" correctly, in this case.)

I started out with the following, but obviously, it's wrong... (it wouldn't "include" Purchases that have an Item with a negative "amount"...)

  @users = User.find(:all,                      :include => {:purchases => :item},                      :select => "SUM(item.amount)",                      :order => "...",                      :conditions => "...",                      :group => "users.id",                      :having => "SUM(item.amount) > 0" )

Thanks for your help with this! Tom

Tom Ha wrote:

Hi there,

I have the following tables...

  User :has_many Purchases   Item :has_many Purchases

...where Item has a column "amount" (can be + or -) and I need to find all Users that have a positive SUM of "amounts" (over all Purchases each one has made).

How does this query look like? (I'm not sure how to handle "SUM" correctly, in this case.)

@user # assume this exists total = Purchase.sum(:amount, :conditions => { 'user_id' => @user }) => SELECT sum("purchases".amount) AS sum_amount FROM "purchases" WHERE ("purchases"."user_id" = 1)