查找与列最相关的其他行

时间:2018-11-16 17:38:22

标签: sql database postgresql

对不起,我不确定如何表达这个问题。

我有一个包含两列的表:tagactivity_id用于跟踪活动和标签之间的多对多关系。 (实际上,标记实际上是一个数字tag_id,但出于问题的考虑,我正在对此进行简化-我稍后可以找出JOIN。)

样本数据:

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

我要查找的是哪些标签与其他标签一起出现最多。例如,在上面的“构思”和“成人”中,多次使用相同的activity_id出现。 Ideation和Trans Man也一起出现。我想要的是一个查询,该查询显示基于activity_id将哪些标签聚在一起,理想情况下根据它们出现的次数进行某种排名。

感谢您的帮助-如果我对此解释不够清楚,请发表评论!

1 个答案:

答案 0 :(得分:3)

我认为您想要自我加入和聚集:

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;