1
的#
- 存储两个人 之间的非对称连接的表(如Twitter关注; 不像Facebook好友)和
- 表存储一个人的加入各个群体
我的任务是找到,为每个不对称的关系,从“人”和“人”之间共享affiliations数量上”。
我做了这个蛮力解决方案,但我想知道是否更明亮的头脑可以拿出更有效的东西。
select frm01.from_person_id, frm01.to_person_id, count(*) num_affl
from
(
select lnk.from_person_id, lnk.to_person_id, ga.grp_id from_grp_id
from links lnk
left outer join grp_affl ga on lnk.from_person_id = ga.person_id
group by lnk.from_person_id, lnk.to_person_id, grp_id
) frm01
inner join
(
select lnk.from_person_id, lnk.to_person_id, ga.grp_id to_grp_id
from links lnk
left outer join grp_affl ga on lnk.to_person_id = ga.person_id
group by lnk.from_person_id, lnk.to_person_id, grp_id
) to01
on (
frm01.from_person_id = to01.from_person_id
and frm01.to_person_id = to01.to_person_id
and frm01.from_grp_id = to01.to_grp_id
)
group by frm01.from_person_id, frm01.to_person_id;
在Netezza上使用ANSI SQL(不允许相关的子查询)。
TIA!
编辑补充表模式:
table lnk:
from_person_id to_person_id
1 4
2 5
3 6
4 2
5 3
table grp_affl:
person_id grp_id
1 A
1 B
1 C
2 A
3 B
4 C
5 A
5 B
5 C
6 A
expected output:
from_person_id to_person_id num_affl
1 4 1
2 5 1
3 6 0
4 2 0
5 3 1
人数1 & 4具有共同(C)1个从属关系,2 & 5具有甲共同点,5 & 3具有乙共同之处。 3没有任何共同之处。同样4 & 2.
我总是建议发布表架构,如果你有样本数据和你的预期输出那么这将有很大的帮助。 –