创建一个视图以获取连接数
Creating a VIEW to get a connection count
我有一个 table 下面存储了 2 个人之间的联系
TABLE (CONNECTION)
ID | REQUEST_PERSON | REQUESTEE_PERSON
我想构建一个 VIEW,它获取 REQUEST_PERSON、REQUESTEE_PERSON 和 MUTUAL_CONNECTION_COUNT(它们之间的其他公共连接计数)。感谢任何帮助
例如,如果我们有一个 table 数据如下
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(*)
假定您没有重复项。
然后,统计这些,就是你要的值。
我有一个 table 下面存储了 2 个人之间的联系
TABLE (CONNECTION)
ID | REQUEST_PERSON | REQUESTEE_PERSON
我想构建一个 VIEW,它获取 REQUEST_PERSON、REQUESTEE_PERSON 和 MUTUAL_CONNECTION_COUNT(它们之间的其他公共连接计数)。感谢任何帮助
例如,如果我们有一个 table 数据如下
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(*)
假定您没有重复项。
然后,统计这些,就是你要的值。