SQL-запрос для определения количества общих друзей по таблице «человек-пара» - PullRequest
0 голосов
/ 24 декабря 2018

Я искал другие вопросы, и мне удалось решить часть того, что я хотел, но я не мог получить от этого ничего.

У меня есть таблица с двумя столбцами (пользователь, друг) вСтол друзей.Каждый пользователь и его / ее друг указаны в таблице следующим образом.

User | Friend
1        2
1        6
2        1
2        3
2        6

Примечание: для каждой пары (пользователь, друг) есть строка (друг, пользователь) Например: 1,2 имеет 2, 1 потому что у пользователя 2 есть друг 1

До сих пор я пришел к следующему запросу, в котором указано количество общих друзей для указанной пары:

select DISTINCT f1.user1 'User', f2.user1 'Friend', COUNT(DISTINCT     f1.user2) 'Mutual friends'
from Friends p
inner join Friends f1 on f1.user2 = p.user1
inner join Friends f2 on f2.user2 = p.user1
where f1.user1 = 2 and f2.user1 = 3 and f1.user2 = f2.user2
group by f1.user1, f2.user1;

Вывод, который яесть:

User    |Friend |Mutual Friends
1            2      1

Я хочу найти количество общих друзей каждой из пар по всей таблице:

User |  Friend |  Mutual Friends
1        2        1
1        6        0
2        1        1
2        3        0
2        6        0

Как узнать количество общих друзей для всех пользователейдруг дружит?

1 Ответ

0 голосов
/ 24 декабря 2018

Вы можете использовать самостоятельное соединение:

select f1.user as user1, f2.user as user2, count(*) as num_in_common
from friends f1 join
     friends f2
     on f1.friend = f2.friend 
group by f1.user, f2.user;

Вы можете добавить предложение where, если хотите получить эту информацию для определенной пары пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...