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 に答える