ruby-on-rails - 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 查询来实现这一点。
解决方案
你可以这样做
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(值)是多次兑换的用户数量。
推荐阅读
- javascript - navigator.getUserMedia 在 Android / Chrome 上不起作用
- python-3.x - 用于自引用结构的python(3.7)数据类
- python - Python Asyncio - RuntimeError: Cannot close a running event loop
- azure-devops - 将 msdeploy parameters.xml 与不带令牌的 VSTS 版本一起使用
- python - 当特定列具有重复行时,为列值创建列名重复
- azure - 获取启用 MSI 的 Web 应用程序的访问令牌
- python - 在python中导入随机词并需要建议
- java - 无论如何以图形或图表形式查看来自 Firestore 的数据?
- git - 尝试编译 Gimp 时无法编译 gegl
- java - jar 文件在系统中的随机位置创建辅助文件夹