Sql 查找与列关联最密切的其他行
对不起,我不知道该如何表达这个问题 我有一个包含两列的表:Sql 查找与列关联最密切的其他行,sql,database,postgresql,Sql,Database,Postgresql,对不起,我不知道该如何表达这个问题 我有一个包含两列的表:tag和activity\u id,用于跟踪活动和标记之间的多对多关系。(事实上,tag实际上是一个数字tag\u id,但出于问题的目的,我将对其进行简化-我可以在以后找出连接。) 样本数据: tag, activity_id "Ideation",52698 "Adult",52698 "Trans man",52698 "USA - Northwest",52698 "Transfeminine",52699 "Ideation",
tag
和activity\u id
,用于跟踪活动和标记之间的多对多关系。(事实上,tag实际上是一个数字tag\u id
,但出于问题的目的,我将对其进行简化-我可以在以后找出连接。)
样本数据:
tag, activity_id
"Ideation",52698
"Adult",52698
"Trans man",52698
"USA - Northwest",52698
"Transfeminine",52699
"Ideation",52699
"Adult",52702
"Trans man",52702
"USA - Northwest",52702
"Ideation",52702
"PTSD",52702
"Religious abuse / trauma",52702
"Adult",52709
"Ideation",52709
我想找到的是哪些标签最容易与其他标签一起出现。例如,在上述情况下,意念和成人多次出现在同一活动中。意念和变性人也同时出现。我想要的是一个查询,以显示哪些标记根据活动id聚集在一起,理想情况下,根据它们出现在一起的次数进行某种排序
感谢您的帮助-如果我没有解释清楚,请发表评论 我认为您需要一个自连接和聚合:
select s1.tag, s2.tag, count(*)
from sample s1 join
sample s2
on s1.activity_id = s2.activity_id and s1.tag < s2.tag
group by s1.tag, s2.tag
order by count(*) desc;
选择s1.tag、s2.tag、count(*)
从样本s1连接
样本s2
在s1.activity_id=s2.activity_id和s1.tag
这太棒了,谢谢。这正是我需要的。下面是我使用的完整查询,上面省略了连接以简化示例:SELECT t1.tag、t2.tag、s1.tag\u id、s2.tag\u id、count(*)从activities_tags s1加入s1上的activities_tags s2.activity_id=s2.activity_id和s1.tag_id