sql - 查找与列关联最密切的其他行

标签 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

我想找到的是哪些标签与其他标签一起出现最多。例如,在上面的 Ideation 和 Adult 中多次出现相同的 activity_id。 Ideation 和 Trans Man 也一同现身。我想要的是一个查询,以显示哪些标签根据 activity_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;

关于sql - 查找与列关联最密切的其他行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53342826/

相关文章:

mysql - 无法执行 GROUP_CONCAT

sql - 外联盟等效项 - GBQ

mysql - 什么是 PostgreSQL 的 EXPLAIN ANALYZE 的 MySQL 等价物

ruby-on-rails - ActiveRecord::RecordNotUnique 全局处理

sql - oracle 在多线程环境中选择和更新或选择和插入

mysql - 更新并选择MYSQL,将Unixtime转换为时间戳

mysql - 处理电子商务返回的数据库模型

mongodb最佳实践: nesting

sql - 搜索查询的水平缩放

sql - 获取 PostgreSQL 事件触发器的表名