如何解决创建 VIEW 以获取连接数
我下面有一张表格,其中存储了 2 个人之间的联系
TABLE (CONNECTION)
ID | REQUEST_PERSON | REQUESTEE_PERSON
我想构建一个获取 REQUEST_PERSON、REQUESTEE_PERSON 和 MUTUAL_CONNECTION_COUNT(它们之间的其他常见连接数)的 VIEW。任何帮助表示赞赏
例如,如果我们有如下表格数据
ID | REQUEST_PERSON | REQUESTEE_PERSON
1 A B
2 A C
3 B C
4 D B
5 D A
6 A E
7 B E
8 A F
9 C G
我需要下面的 VIEW 显示
ID | REQUEST_PERSON | REQUESTEE_PERSON | MUTUAL_CONNECTION_COUNT
1 A B 3
2 A C 1
3 B C 1
4 D B 1
5 D A 1
6 A E 1
7 B E 1
8 A F 0
9 C G 0
解决方法
这有点棘手。这是可以执行您想要的操作的代码:
select c.*,(select count(*)
from (select v.person2
from connections c2 cross apply
(values (c2.REQUESTEE_PERSON,c2.REQUEST_PERSON),(c2.REQUEST_PERSON,c2.REQUESTEE_PERSON)
) v(person1,person2)
where v.person1 IN (c.Request_Person,c.Requestee_Person)
group by v.person2
having count(*) = 2
) v
) in_common
from connections c
order by id;
Here 是 SQL Fiddle。
问题的本质是找到与每一行中的两个人都有联系的人。您的连接是单向的,这使得逻辑难以表达——C 可以是任一连接中的第一人称或第二人称。
啊!
因此,最内层的子查询向图形添加反向链接。然后,它可以专注于按第一人称进行过滤 - 谁必须匹配外部查询中的人。第二人称可能是共同点。
内部聚合只是第二人称总结。它使用 having count(*) = 2
进行过滤以指示外部查询中的两个人都需要连接到内部查询中的第二个人。 count(*)
假定您没有重复项。
然后,把这些都算出来,就是你想要的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。