计算共同的朋友/节点

时间:2017-07-30 09:03:41

标签: sql ms-access

我有下面的表1,想要创建一个表格,显示Ent1与Ent1中的任何其他人有多少朋友。

例如A(AAA的简称)有朋友B,C,D,E,F,而B有朋友A,C,E,F。它们共有C,E,F,因此结果应为AAA BBB 3

可以在acces / SQL中完成吗?我不知道......

表1

Ent1 Ent2 link
AAA BBB friend
AAA CCC friend
AAA DDD friend
AAA EEE friend
AAA FFF friend
BBB AAA friend
BBB CCC friend
BBB EEE friend
BBB FFF friend
CCC AAA friend
CCC BBB friend
CCC EEE friend
CCC FFF friend
DDD AAA friend
DDD KKK friend
DDD LLL friend
EEE AAA friend
EEE BBB friend
EEE CCC friend
FFF AAA friend
FFF BBB friend
FFF CCC friend
KKK DDD friend
LLL DDD friend

结果应该是:

AAA BBB 3
AAA CCC 3
AAA DDD 0
AAA EEE 2
AAA FFF 2
AAA KKK 1
AAA LLL 1
BBB CCC 3 etc...

1 个答案:

答案 0 :(得分:0)

是的,可以做到。我有点讨厌你的桌子,我觉得它可以归一化为两张桌子以便更好地工作但是我现在还没想出来。所以这里是如何在SQL模式下使用当前表进行的:

select s.Person_1, s.Person_2, count(*) as tot
    from
    (select 
        a.Ent1 as Person_1
        , a.Ent2 as Common_friend
        , b.Ent1 as Person_2
        from [Table1] as a
    inner join [Table1]  as b
    on a.ent2 = b.ent2
    where a.ent1 <> b.ent1) as s
group by s.Person_1, s.Person_2

这样做的方式是子表s通过自我加入您的表格来获取您想要计算的所有链接(where a.ent1 <> b.ent1使得您不会将某个人视为与自己联系)。然后外部查询计算对之间的链接数。该代码将给出伪重复,因为它将AAA作为第一人称与BBB作为第二人之间的链接计数,与作为第一人的BBB和作为第二人的AAA不同。我没有想出一个简单的解决方法,但是你想要的数据就在那里。