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

use*_*663 2 ruby postgresql sequel

这对我来说太难了。是给杰瑞米的!

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

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

这些表是具有项目名称和公司 ID 的费用_项目以及具有公司 ID、项目和金额(仅提及关键列)的费用_项目 - “公司 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
Run Code Online (Sandbox Code Playgroud)

工作正常,但当我添加

expense_total = expense_items.sum(:amount).to_f.to_json
Run Code Online (Sandbox Code Playgroud)

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

TypeError - no implicit conversion of Symbol into Integer:
Run Code Online (Sandbox Code Playgroud)

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

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

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

以及它的变体,所有这些都失败了。

我想要一个获取所有项目名称的结果(即使没有费用条目并返回如下内容:

project  item_count item_amount
pr 1      7           34.87
pr 2      0           0
Run Code Online (Sandbox Code Playgroud)

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

非常感谢,伙计们。

use*_*663 5

想通了,我希望这对其他人有帮助:

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
Run Code Online (Sandbox Code Playgroud)