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.
我總是建議發佈表架構,如果你有樣本數據和你的預期輸出那麼這將有很大的幫助。 –