我的作业我有以下任务: 我有一个简单的数据库,就像Facebook与朋友及其关系。 现在我要计算直接朋友的数量和直接朋友的朋友数量。
所以我的方法是: 选择所有直接朋友并将他们的ID存储在变量中。 然后我迭代这些id并将当前用户的所有直接朋友存储在另一个变量中。 (对于每一个都相同)。最后,我得到了一个与相关用户ID相关的大数组。然后我只需要选择不同的id并计算它们。
我的问题是: 如何将id存储在一个变量(数组?)中,以便我可以轻松地遍历它们,最后选择一个不同的id?
希望你能给我一个暗示...
答案 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.