【发布时间】:2019-06-24 07:28:31
【问题描述】:
我有一个有趣的问题
我想按表格的数组列中的单个值进行计数
例如
对于用户模型
id | community_ids
1 | {2, 4}
2 | {2, 5}
3 | {2, 4}
我想说
Community| User count
2 | 3
4 | 2
5 | 1
我有办法
User.
pluck(Arel.sql('unnest(community_ids) as community_id')).
group_by(&:itself).
transform_values(&:count)
但问题是我正在遍历所有用户
谢谢
【问题讨论】:
-
Community是用户belongs_to :community的模型吗?还是community_ids是数据类型数组? -
这就是为什么我通常不使用数组列的原因,除非我绝对确定我不必对其应用条件。因为那并不总是很容易。现在对于您的问题,无论如何您都必须遍历所有用户,无论是在 SQL 中还是在 ruby 代码中,如果我是您,我可能会编写一些自定义 sql 来为我执行此操作。对于较大的数据集,这仍然不会很快。
-
值是否已知并限制在数组列中?如果是这样,那将使它更容易和更有效。
标签: ruby-on-rails postgresql ruby-on-rails-5