sql - 获取postgres中数组元素相互出现的次数
问题描述
我正在尝试获取两个元素在数组中一起出现的次数。我的表如下所示:
id districts
---------------------------------------
1 {district1, district2}
2 {district1, district2, district3}
3 {district5, district2, district4}
4 {district2, district3, district1}
5 {district1, district5, district3}
...
我想获得多个地区一起在同一个数组中的次数。所以这个例子的结果是:
district1, district2, 2
district1, district3, 1
district1, district3, 3
...
对于它们的所有组合,我都需要它。关于如何获得这样的任何结果的任何建议都会有很大的帮助
解决方案
取消嵌套、连接和聚合:
with d as (
select t.id, district
from d cross join lateral
unnest(districts) district
)
select d1.district, d2.district, count(*) as cooccurrences
from d d1 join
d d2
on d1.id = d2.id and d1.district < d2.district
group by d1.district, d2.district
推荐阅读
- java - 你如何遍历scala中的每个状态?
- json - 如何在期望 json 时使用 curl 处理分块响应
- ssas - 编写等效于范围分配的计算成员
- python - 如何在 0 到 0.20 之间的 numpy 数组中获得随机浮点数?
- node.js - 从另一个文件修改变量
- magento2 - 登录magento 2时recaptcha出现错误500
- c++ - 如何将“extern int getchar (void);”从 stdio.h 转换为 Qt::Key?
- web-services - RestRequest 添加参数不起作用 Delphi Rad Studio
- github - 使用 Firefox 将 UTF-8 复制的文本粘贴到 github 问题中,删除 `\n`?
- uwp - C++/WinRT 控制台 UWP 应用的 AppxManifest.xml 中的入口点是什么?