MySQL/RubyonRails——如何在a中“求和”:有很多例子

MySQL/RubyonRails——如何在a中“求和”:有很多例子,mysql,ruby-on-rails,group-by,sum,having,Mysql,Ruby On Rails,Group By,Sum,Having,我有以下表格: 用户:你买了很多东西吗 物品:你买了很多东西吗 Item有一个列amount可以是+或-并且我需要找到所有用户的Item.amounts都是正数 这个查询看起来怎么样?在这种情况下,我不知道如何正确处理总和 我从以下内容开始,但显然,这是错误的。。。它不包括带有负数项目的购买。金额 @users=User.find:all, :include=>{:purchases=>:item}, :select=>sumtime.amount, :order=>。。。, :条件=>。。。,

我有以下表格:

用户:你买了很多东西吗 物品:你买了很多东西吗

Item有一个列amount可以是+或-并且我需要找到所有用户的Item.amounts都是正数

这个查询看起来怎么样?在这种情况下,我不知道如何正确处理总和

我从以下内容开始,但显然,这是错误的。。。它不包括带有负数项目的购买。金额

@users=User.find:all, :include=>{:purchases=>:item}, :select=>sumtime.amount, :order=>。。。, :条件=>。。。, :group=>users.id, :having=>SUMitem.amount>0

谢谢你的帮助!
Tom

听起来这是一些模型方法的一个很好的例子

我没有对此进行测试,但我认为您希望执行以下类似操作:

class User < ActiveRecord::Base

has_many :purchases
has_many :items, :through => :purchases

def items_total
  #get all the items iterate over them to get the amount, 
  #compact to get rid of nils
  #and reduce with a sum function to total and return
  items.all.each{|item| item.amount}.compact.reduce(:+)
end
然后

User.items\u total

尝试以下操作:

User.all(:joins => items, :group => "users.id", 
          :having => "SUM(items.amount) > 0")

谢谢,但如果我没有弄错的话,这似乎是一个误解:您的解决方案似乎返回了一笔金额,我实际上需要用户满足上述条件。顺便说一句,我从来没有遇到过。reduce:+-你知道我在哪里可以找到这篇文章的文档吗?是的,你是对的,我以为你是在“总计”类型的上下文中查找用户的项目总数。reduce:+是reduce{| sum,i | sum+i}的缩写,它基本上对集合中的所有项求和。谢谢-这是需要的!1回答问题:它使用:joins而不是:include的解释是什么?include子句使用左外连接,这会导致没有项目的用户的数量为空。SUM函数不喜欢NULL。除此之外,在这种情况下:join比:include更合适。