使用PostGres在Ruby on Rails中进行分组

时间:2013-09-17 21:11:17

标签: ruby-on-rails postgresql rails-activerecord rails-postgresql

我有以下代码行在sqlite中工作,但在PostGres中没有:

@income_by_category = SoldCategory.group(:category_name).having("branch_id=?", @branch_id).sum(:total).to_a

它基本上将具有相同SoldCategory的{​​{1}} :category_name分组,添加所有@branch_id,并将其转换为数组。我用它来为一些图表提供一些数据。它给了我类似的结果:

:total

如何使用PostGress获得相同的结果?

1 个答案:

答案 0 :(得分:1)

因此,您想要获取具有给定sold_categories的所有branch_id,然后找到每个类别的总和?你的方法有点偏,HAVING不是你想要的。你想要的SQL就是这样:

select category_name, sum(total)
from sold_categories
where branch_id = ?
group by category_name

并使用ActiveRecord转换为此内容:

SoldCategory.where(:branch_id => @branch_id).sum(:total, :group => :category_name)

这会给你一个漂亮的Hash,看起来像这样:

{ 'shoes' => 5000, 'pants' => 6000, 'shirts' => 7000 }

修复后,下一步应该是在开发环境中安装PostgreSQL,以便可以使用相同的数据库进行开发和部署。数据库之间存在很多细微差别,没有ORM可以保护您;数据库可移植性是一个神话,除非您的需求非常简单,或者您编写自己的可移植性层并测试测试测试测试并测试更多,然后运行更多测试以确保您已经测试了您在所关注的每个数据库上使用的每个代码路径约。