sql - 从共享特定属性的 2 列中计算对的唯一组合
问题描述
给定 2 列事件参与者 ID 和事件:
id | event
1 | A
2 | A
3 | A
1 | B
4 | B
2 | C
3 | C
1 | D
4 | D
1 | E
2 | E
4 | E
我希望计算所有可能的、独特的组合共同事件参与者对的出现次数,这类似于:
pair | times_co_participate | co_events
1, 2 | 2 | A, E
1, 3 | 1 | A
1, 4 | 3 | B, D, E
2, 3 | 2 | A, C
2, 4 | 1 | E
3, 4 | 0 | null
id 对可以在 id1 和 id2 的 2 个单独的列中,最终目标是找到具有最高共同参与发生率的对
解决方案
使用自联接和聚合:
select t1.id, t2.id, count(*), array_agg(event) as events
from t t1 join
t t2
on t1.event = t2.event and t1.id < t2.id
group by t1.id, t2.id
推荐阅读
- c# - C# - 在某些值之间替换文本文件中的字符串
- jboss - jboss-6.0.0.Final 与 wildfly-10.1.0.Final 中的每个用户数据源连接池(通过安全域)
- groovy - Groovy XMLParser & XMLSlurper
- binary-search-tree - 从前序遍历构造 bst
- python-3.x - Homebrew 不会在 /usr/local/bin 上创建 pip3 符号链接
- angularjs - UI-路由器动态“抽象”属性
- java - node.js 上的服务器 + android 客户端 + json 文件
- reactjs - Reactjs 不可变状态到可变
- github - PhpStorm + GitHub 比较文件
- c++ - 使用 MinGW 的 Office COM 插件