网络中的节点关系?

时间:2014-01-15 18:24:49

标签: sql excel

我有两列A和B,分别包含不同组织和不同基金的ID。 A列有1,200个具有重复的不同值(不同的组织)。 B列有大约350个具有重复的不同值(不同的基金)。大约有8,500个单独的行,每个行都不同,因为它们代表了从基金向组织提供的资助。

事实上,多个基金向同一个组织提供资助,这样这些资金就可以通过资助来实现“相互关联”。

我想找到1)基金通过拨款筹集的其他基金数量和2)哪些基金相互关联最多。

这有意义吗?如果是这样,你如何解决这些价值观?我在SQL Server中提取数据并尝试使用R sna包,NodeXL和一些嵌套的Excel函数无济于事。我不在我的元素中。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,那就是你需要的。

select  b.fund, COUNT(*)
from yourtable a inner join yourtable b on a.org = b.org 
group by b.fund order by COUNT(*) desc

这将返回与之关联的资金的身份(注意:它会计算两次,例如,如果(org1,fund1)和(org2,fund1)和(org1,fund2)存在,它将返回( fund1,3),(fund2,3)因为与fund1和fund2相关的组织有三种基金关系。

如果您只想计算参与此关系的DISTINCT资金,请使用:

select  b.fund, COUNT(distinct a.fund)
from yourtable a inner join yourtable b on a.org = b.org 
group by b.fund order by COUNT(distinct a.fund) desc

请注意,这将自行计算。

这两个都将自动订购最多的关联资金。

修改 在了解了有关问题和表结构的更多信息后,我认为这有效:

    select f1.fund_ID, f2.fund_ID, Count(distinct o1.org_ID) 
from Fund f1 inner join orgs o1 on o1.grnt_id = f1.grnt_id 
inner join orgs o2 on o1.org_ID = o2.org_id and o1.grnt_id <> o2.grnt_id 
inner join fund f2 on f2.grnt_id = o2.grnt_id and f2.fund_id <> f1.fund_Id 
where f1.FUND_ID < f2.FUND_ID
group by f1.fund_ID, f2.fund_ID order by count(o1.org_ID) desc 

enter image description here