postgreSQL:查找所有当前使用的组合



给定用户和策略之间的多对多表,其结构如下:

policy_id| user_id 
---------|---------
1    |   1     
3    |   1     
6    |   1     
2    |   2     
4    |   3     
6    |   4    
5    |   5    
7    |   5
6    |   7 
6    |   8 

我正在查找用户正在使用的所有唯一策略组合的列表。

我正在寻找的结果是:

主动策略组合:[1,3,6],[2],[4],[6],[5,7]

这在单个查询中可能吗?我唯一的解决方案是扫描整个表格,并将每个组合加载到一个集合中,过滤出重复的集合。

编辑:

回答意图和目的。

我正在将生成的策略集的实时处理分离到我们向用户显示的UI中,并缓存这些信息,这样我们就不会不断地重新计算这些信息。对于给定时间段内的给定策略集,用户会接收到数量确定的消息。

例如,如果您有策略1,2,3-我们计算并确定您将接收消息2,5。目前,我们正在对每个客户端查询进行计算/处理。我想确定所有可能的策略组合,以便可以预先缓存映射。

您可以聚合两次:

select policies, count(*) as num_users
from (select user_id, array_agg(distinct policy_id order by policy_id) as policies
from t
group by user_id
) u
group by policies;

最新更新