sql - SQL:查找所有当前使用的组合
问题描述
给定用户和策略之间的多对多表,其结构如下:
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;
推荐阅读
- c# - Google Maps API - 从 JSON 响应中读取地点详细信息
- r - 并行化采用外部指针的函数 (XPtr)
- node.js - 当我有额外的不等式 where() 标准时,如何从 firestore 集合中获取随机文档?
- cross-compiling - 为 QNX 编译 LAME
- apache-spark - 如何使用纱线配置 24/7 运行 Spark 流
- python - 从数据框列获取数据作为元组列表
- android - 如何在滚动视图中设置当前项目的背景颜色
- mysql - 使用 Cloud Formation 将 MySQL RDS 存储类型从磁性更改为 SSD/预置 IOPS
- kubectl - 重复 watcher.go:208] watch chan 错误:etcdserver: mvcc: required revision has been compacted
- android - 使用 ExoPlayer 的自适应 .mp4 视频流