首页 > 解决方案 > Rails - Postgres - 按关联对象计数分组

问题描述

我有一个用户模型和一个赎回模型。一个用户可以进行多次兑换。我想获取进行了 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-railspostgresqljoinactiverecord

解决方案


你可以这样做

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(值)是多次兑换的用户数量。


推荐阅读