【问题标题】:Rails - group by results of an aggregate function?Rails - 按聚合函数的结果分组?
【发布时间】:2020-06-24 22:57:39
【问题描述】:

假设我有一个购买表,其中包含客户customer_id 和他们在购买上花费的钱price。我想将每个客户的总花费相加,然后找出这些总和的频率。

我尝试了类似的方法:

Purchase.
group(:customer_id).
select("SUM(price)").
group("SUM(price)").
count

但收到错误ActiveRecord::StatementInvalid: PG::GroupingError: ERROR: aggregate function calls cannot be nested

有一个两步过程,其中我将"SUM(price)" 作为一个数组并将其转换为一个哈希值,其中总价格为键,频率为值,但我想知道是否有一步查询使用 Rails 语法。

【问题讨论】:

    标签: sql ruby-on-rails ruby


    【解决方案1】:

    那张桌子上还有其他列吗?

    也尝试将它们分组。

    Purchase.select("SUM(price),purchase_id").group_by(:purchase_id)
    

    确保只取所需的列并将它们分组。

    【讨论】:

    • 这只是一个例子,在我的实际数据中,我有 11 列,包括一些元数据,如创建和更新时间。这些人分组如何克服嵌套组的问题?
    • 因为当你对它们求和时,你实际上是按它们的总和对它们进行分组。这样许多列将无法对应。所以我推荐的是像上面那样选择你需要的列。修改后的版本。
    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    相关资源
    最近更新 更多