ruby - 如何使用 Sequel ORM 对同一个表中的一列求和以生成三个不同的聚合?

标签 ruby postgresql sequel

我的查询是这样的:

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, :p__project_id).
  select_more{count(:i__item_id)}.
  select_more{sum(:i__amount)}.to_a.to_json

有效。

但是,付款方式包括现金、银行卡和发票。因此,我想将每一项进行汇总,以分别得出现金、银行卡和发票付款的离散总额。我在查询中包含了以下行

select_more{sum(:i__amount).where(:i__mop => 'card')}.

错误消息是

NoMethodError - undefined method `where' for #<Sequel::SQL::Function:0x007fddd88b5ed0>:

所以我单独创建了数据集

ds1 = expense_items.where(:mop=>'card', :expense_company_id=>user_company_id).sum(:amount)

并将其附加到原始查询的末尾,

select_append{ds1}

它取得了部分成功,因为返回的 json 现在是:

{"project_name":"project 2","project_id":2,"count":4,"sum":"0.40501E3","?column?":"0.2381E2"}

可以看出,这个元素没有名称,我需要它才能在 getJSON 调用中引用它。我尝试通过添加 ___a 来添加标识符 如下所示的 ds1 查询

ds1 = expense_items.where(:mop=>'card', :expense_company_id=>user_company_id).sum(:amount___a)

但是失败了。

总而言之,这是正确的方法吗?无论如何,在进行后续求和查询时如何提供标识符?换句话说 sum(:a_column).as(a_name)

非常感谢。

最佳答案

Dataset#sum 返回总和,而不是修改后的数据集。您可能想要类似的东西:

ds1 = expense_items.where(:mop=>'card', :expense_company_id=>user_company_id).select{sum(:amount)}
select_append{ds1.as(:sum)}

关于ruby - 如何使用 Sequel ORM 对同一个表中的一列求和以生成三个不同的聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29240322/

相关文章:

postgresql - 为什么 DDL 语句会频繁挂起?

SQL - IN 运算符获取位置

ruby - 续集,传值给pg_array查询

mysql - Ruby Sequel MySQL 插入错误

ruby-on-rails - 验证表单中是否存在嵌套属性

ruby - 为什么 Google 的自定义搜索 API 说我在使用 Ruby 客户端时缺少访问 token ?

ruby-on-rails - 用户路由 - Rails

ruby - 为什么 Ruby 中的 && 有时会进行快捷方式评估,有时却不会?

Postgresql存储过程返回表所有列

ruby - 连接表时如何嵌套哈希数据集