phoenix0619 2008-07-28 16:15
浏览 286
已采纳

怎样让Model.sum返回多个列

我的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。

  • 写回答

3条回答 默认 最新

  • iteye_8302 2008-07-29 10:39
    关注

    AR提供的sum不支持多个group field name,但是你也不需要写原始sql,直接用AR提供的find也可以做到,在find里面指定select参数和group参数就可以了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退