我的Model Bank中有3个字段:money,bank_name,save_year,现在需要根据bank_name,save_year分组来取得相应的money总数,使用AR中的sum来实现:
Bank.sum(:money,:group=>'bank_name,save_year')
但是结果只返回两列:money和save_year,如果把group中的两个字段换个位置:
Bank.sum(:money,:group=>'save_year,bank_name')
结果仍然为两列,但有点出入:money和bank_name。
查看了AR的相关源码,sum返回的结果是一个hash,也就是说返回结果只能为两个字段,不能返回我需要的sum_money,bank_name和save_year。
group sum这种情况很多时候都不只是用到一个字段来group吧,AR应该有相应的解决方案,但是我找了很久没有找到,不知道怎样才能够实现我的需求。当然使用SQL可以实现,但实际应用中这个查询涉及到几个表的关联,如果写原始SQL,会有一大堆join,很麻烦,而且代码移植到别的数据库时不知道会不会出问题,AR+一大堆原始SQL的实现方式比较难看,有没有别的方式实现?
PS:这个问题被评为“JavaEye会员集体投票评为新手帖”,可惜没看到“集体”中的一个会员为我解答这个问题,或者大家都不愿意回答新手的问题?
[b]问题补充:[/b]
实际上涉及到两个表Bank和BankInfo,要根据BankInfo里面的bank_name和Bank里面的save_year来group,所以用
Bank.find(:all,:select=>'sum(money),save_year,bank_name',
:group=>'save_year,bank_name',:joins=>:BankInfo)
以前没有加上:joins,所以提示没有bank_name。