如何用续集ORM和postgresql对sum和count进行分组?

时间:2015-03-20 18:13:46

标签: ruby postgresql sequel

这对我们来说太难了。这是杰里米!

我有两个表(虽然我也可以设想需要加入第三个表)并且我想在同一个表中对一个字段和计数行求和,同时加入另一个表并以json格式返回结果。 / p>

首先,需要求和的数据类型字段是数字(10,2),数据插入为params['amount'].to_f

表格是expense_projects,它具有项目名称,公司ID和expense_items具有company_id,项目和金额(仅提及关键列) - “company_id”列被消除歧义。

所以,以下代码:

expense_items = DB[:expense_projects].left_join(:expense_items, :expense_project_id => :project_id).where(:project_company_id => company_id).to_a.to_json

工作正常但我添加

expense_total = expense_items.sum(:amount).to_f.to_json

我收到一条错误消息,上面写着

TypeError - no implicit conversion of Symbol into Integer:

所以,第一个问题是为什么以及如何解决这个问题?

然后我想加入这两个表并从左边(第一个表)获取所有项目名称,并在第二个表中获得总数和计数项目。我试过了

DB[:expense_projects].left_join(:expense_items, :expense_items_company_id => expense_projects_company_id).count(:item).sum(:amount).to_json

及其变体,所有这些都失败了。

我想得到一个获得所有项目名称的结果(即使没有费用条目并返回类似的内容:

project  item_count item_amount
pr 1      7           34.87
pr 2      0           0

等等。如何通过一个以json格式返回结果的查询来实现这一点?

非常感谢,伙计们。

1 个答案:

答案 0 :(得分:4)

想出来,我希望这有助于其他人:

DB[:expense_projects___p].where(:project_company_id=>user_company_id).
  left_join(:expense_items___i, :expense_project_id=>:project_id).
  select_group(:p__project_name).
  select_more{count(:i__item_id)}.
  select_more{sum(:i__amount)}.to_a.to_json