【问题标题】:Rails - Postgres - Group by associated Object countRails - Postgres - 按关联对象计数分组
【发布时间】:2020-05-28 01:47:09
【问题描述】:

我有一个用户模型和一个赎回模型。一个用户可以进行多次兑换。我要获取1次兑换的用户数,2次,3次,....

用户模型

has_many :redemptions, foreign_key: :redeemed_by

赎回模式

belongs_to :user, foreign_key: :redeemed_by

我可以运行以下查询并获得针对每个用户的兑换。

 User.joins(:redemptions).group('redemptions.redeemed_by').count

结果:

{185=>2, 187=>1, 2042=>4, 2544=>1} 

这给了我每个用户进行的兑换次数。但我想要反过来。我想有多少用户进行了 1 次兑换,有多少 2 次,然后继续......

我想通过 Rails 查询来实现这一点。

【问题讨论】:

    标签: ruby-on-rails postgresql join activerecord


    【解决方案1】:

    你可以这样做

    User.joins(:redemptions)
        .group('redemptions.redeemed_by').count
        .group_by{|k,v| v}
        .map{|k,v| [k, v.size]}.to_h
    

    返回

    {1=>2, 4=>2, 5=>1}

    其中 1、4 和 5(键)是兑换次数,2、2、1(值)是多次兑换的用户数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多