Table: google_friends_network
The Table Consists of two attributes: user_id and Friend_id
Goal
Find the count of Mutual Friends’ respective to each user_id.
Table: google_friends_network
The Table Consists of two attributes: user_id and Friend_id
Goal
Find the count of Mutual Friends’ respective to each user_id.
SELECT
uf.user_id,
COUNT(DISTINCT ff.friend_id) AS mutual_friend_count
FROM
user_friends uf
JOIN
user_friends ff
ON uf.friend_id = ff.user_id -- friend’s friend
WHERE
ff.friend_id IN (
SELECT friend_id
FROM user_friends
WHERE user_id = uf.user_id -- also the user's friend
)
GROUP BY
uf.user_id;
Great post. Learned a lot from this. Keep writing more.
WITH UserFriends AS (SELECT user_id, friend_idFROM google_friends_network)SELECTuf.user_id,COUNT(DISTINCT gf.friend_id) AS mutual_friend_countFROMUserFriends ufJOINgoogle_friends_network gf ON uf.friend_id = gf.user_idGROUP BYuf.user_id;
How about
WITH UserFriends AS (SELECT user_id, friend_idFROM google_friends_network), FriendsOfFriends AS (SELECT uf.user_id, gf.friend_id AS friend_of_friendFROM UserFriends ufJOIN google_friends_network gf ON uf.friend_id = gf.user_id)SELECT user_id, COUNT(DISTINCT friend_of_friend) AS mutual_friend_countFROM FriendsOfFriendsGROUP BY user_id;
You can use below query in SQL.
WITH UserFriends AS (SELECT user_id, friend_idFROM google_friends_network),FriendsOfFriends AS (SELECT uf.user_id, gf.friend_id AS friend_of_friendFROM UserFriends ufJOIN google_friends_network gf ON uf.friend_id = gf.user_id),MutualFriends AS (SELECT fof.user_id, COUNT(1) AS mutual_friend_countFROM FriendsOfFriends fofJOIN google_friends_network uf ON fof.user_id = uf.user_id AND fof.friend_of_friend = uf.friend_idGROUP BY fof.user_id)SELECT user_id, mutual_friend_countFROM MutualFriends;