ruby - 如何使用后续 ORM 和 postgresql 对 sum 和 count 进行分组?

标签 ruby postgresql sequel

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

我有两个表(尽管我也可以想象需要连接第三个表),我想在同一个表中对一个字段求​​和并计算行数,同时与另一个表连接并以 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/

相关文章:

ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖

ruby - Nokogiri Mechanize 解析问题

SQL查询返回同一个表中匹配和不匹配的行

python - 如何使用 psycopg2 获取二进制数据

ruby - Sequel 中的存储过程返回代码 (Ruby ORM)

mysql - Sql 中的过滤语句优先级(尤其是连接)

ruby - 我可以使用什么正则表达式将字符串拆分为单词,但将短语放在圆括号中?

mysql - 更新后数据库字段未更改

sql - 使用单个查询重命名和更改列类型的 PostgreSQL 查询

c# - Ruby Sequel 等同于 LINQ to SQL 选择匿名对象