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

SQL:查找所有当前使用的组合,sql,postgresql,Sql,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 我正

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

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;

试一试——我在这张表中有4亿行;这可能需要一段时间(在这么大的表上运行这样的查询是不是一个坏主意?)@PressingOnAlways。考虑到你要求做的事情,我认为你没有太多选择。这是个坏主意吗?可能吧。但根据你提供的信息,别无选择。也许如果你发布你的意图是什么,你想对结果做什么,可能会有一个更好的方法。用意图更新,我想对结果做什么。