这对我来说太难了。这是给杰里米的!
我有两个表(尽管我也可以想象需要连接第三个表),我想在同一个表中对一个字段求和并计算行数,同时与另一个表连接并以 json 格式返回结果。
首先,需要求和的数据类型字段为 numeric(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 格式返回结果来实现这一点?
非常感谢,伙计们。
最佳答案
弄清楚了,我希望这对其他人有帮助:
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
关于ruby - 如何使用后续 ORM 和 postgresql 对 sum 和 count 进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29173195/