【发布时间】:2019-10-29 17:23:19
【问题描述】:
我希望能够在我的数据库上执行多个计算,所有计算都以用户 ID 为中心,但我不知道之后如何重新组合它们。
假设我有 User、Purchases 和 DiscountUsage 的三个表。我想找到用户购买的最后日期和使用的折扣总数。我会运行两个单独的命令:
User.joins(:purchases).group("users.id").select("users.id", "MAX(purchases.purchase_date)")
User.joins(:discount_usages).group("users.id").select("users.id", "COUNT(*)")
虽然我希望我的最终输出是一张表,加入到users.id,但select 的输出不是使用Rails 函数的正确数据类型。我如何表示来自两个调用的 users.id 值相同,从而根据这些列加入它们?
【问题讨论】:
-
你看过merge吗?
-
@jvillian 这很相似,但它要求输入采用 ActiveRecord::Relation 格式。我看不出如何在保持该格式的同时执行分组计算。
-
您能否展示您尝试组合的两个实体(可能是数组?或哈希?)的样本以及您希望结果的样子?
-
@jvillian 抱歉,仔细检查后我认为这主要是我正在寻找的,但我必须阅读文档以更好地了解如何使用它。你知道是否有类似“left_merge”的东西吗?类似于 left_join,它将合并公共值但不忽略不匹配的值?
-
再次,如果您显示一些示例数据,它会更容易提供帮助。否则,这是一种猜测。
标签: ruby-on-rails ruby postgresql join