将结果存储在plpgsql中的变量中

时间:2012-05-25 09:21:33

标签: sql postgresql plpgsql

我的作业我有以下任务: 我有一个简单的数据库,就像Facebook与朋友及其关系。 现在我要计算直接朋友的数量和直接朋友的朋友数量。

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

我的问题是: 如何将id存储在一个变量(数组?)中,以便我可以轻松地遍历它们,最后选择一个不同的id?

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

1 个答案:

答案 0 :(得分: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.