0

对于我的家庭作业,我有以下任务:我有一个简单的数据库,就像 facebook 与朋友和他们的关系。现在我要统计直系好友的数量和直系好友的好友数量。

所以我的方法是:选择所有直接朋友并将他们的 id 存储在一个变量中。然后我遍历这些 id 并将当前用户的所有直接朋友存储在另一个变量中。(对于每个相同)。最后,我得到了一个包含所有相关用户 ID 的大数组。然后我只需要选择不同的 id 并计算它们。

我的问题是:如何将 id 存储在变量(数组?)中,以便我可以轻松地循环它们并最终对 id 进行不同的选择?

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

4

1 回答 1

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共同的朋友会被计算多次。
sqlfiddle 上的演示。

于 2012-05-26T18:43:06.633 回答