2012-05-25 47 views
0

我的作业我有以下任务: 我有一个简单的数据库,就像Facebook和朋友及其关系一样。 现在我要计算直接朋友的数量和直接朋友的朋友的数量。将结果存储在plpgsql中的变量

所以我的方法是: 选择所有直接的朋友,并将他们的ID存储在一个变量。 然后我迭代这些ID并将当前用户的所有直接朋友存储在另一个变量中。 (对于每个相同)。最后,我得到了一个很大的数组,用来表示相关的用户标识。然后我只需要选择不同的ID并对它们进行计数。

我的问题是: 如何将ID存储在一个变量(数组?)中,以便我可以轻松地循环它们并最终做出明确的ID选择?

希望你能给我一个提示上...

回答

3

如果分配不要求使用PLPGSQL的,它可以更容易与普通SQL来解决。

对于这个表(你应该已经提供):

CREATE TEMP TABLE f (
    friend_of int 
    ,friend_with int 
    ,PRIMARY KEY (friend_of, friend_with) 
); 

多少朋友没有用户1有哪些?

SELECT count(*) As friends 
FROM f 
WHERE friend_of = 1; 

用户1的朋友有多少个独特的朋友(不包括用户1自己)?

SELECT count(DISTINCT f2.friend_with) - 1 AS friends_friends -- minus himself 
FROM f f1 
JOIN f f2 ON f2.friend_of = f1.friend_with 
WHERE f1.friend_of = 1; 

没有DISTINCT常见的朋友会被多次计数。
Demo on sqlfiddle.

相关问题