Postgresql: найти общих друзей между всеми пользователями в таблице
У меня есть такая таблица:
create table a (
uid1 char(30),
uid2 char(30),
date_req date,
evnt char(30)
);
insert into a (uid1, uid2, date_req, evnt) values ('abc', 'pqr', '1/1/2018', 'accept');
insert into a (uid1, uid2, date_req, evnt) values ('abc', 'abcd', '1/2/2018', 'accept');
insert into a (uid1, uid2, date_req, evnt) values ('abc', 'abce', '1/1/2018', 'accept');
insert into a (uid1, uid2, date_req, evnt) values ('abc', 'ftu', '1/4/2018', 'accept');
insert into a (uid1, uid2, date_req, evnt) values ('pqr', 'fuc', '1/1/2018', 'reject');
insert into a (uid1, uid2, date_req, evnt) values ('abcd', 'mno', '2/1/2018', 'reject');
insert into a (uid1, uid2, date_req, evnt) values ('abce', 'pqr', '1/5/2018', 'accept');
insert into a (uid1, uid2, date_req, evnt) values ('ftu', 'stu', '1/8/2018', 'reject');
insert into a (uid1, uid2, date_req, evnt) values ('fuc', 'vwx', '3/1/2018', 'accept');
insert into a (uid1, uid2, date_req, evnt) values ('mno', 'abc', '5/12/2018', 'accept');
insert into a (uid1, uid2, date_req, evnt) values ('pqr', 'abc', '1/13/2018', 'accept');
insert into a (uid1, uid2, date_req, evnt) values ('stu', 'abc', '1/16/2018', 'reject');
insert into a (uid1, uid2, date_req, evnt) values ('vwx', 'abc', '1/21/2018', 'reject');
insert into a (uid1, uid2, date_req, evnt) values ('abc', 'pqr', '1/1/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('abc', 'abcd', '1/1/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('abc', 'abce', '1/1/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('abc', 'ftu', '1/3/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('pqr', 'fuc', '1/1/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('abcd', 'mno', '2/1/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('abce', 'pqr', '1/3/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('ftu', 'stu', '1/2/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('fuc', 'vwx', '3/1/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('mno', 'abc', '3/1/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('pqr', 'abc', '1/1/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('stu', 'abc', '1/12/2018', 'sent');
insert into a (uid1, uid2, date_req, evnt) values ('vwx', 'abc', '1/2/2018', 'sent');
Я хочу знать всех общих друзей по уникальным комбинациям uid1 и uid2. Например: если abc дружит с pqr, а pqr дружит с mno, то у mno и abc есть 1 общий друг. Точно так же хотелось бы знать для каждого пользователя в таблице.
Пример ожидаемого результата будет выглядеть следующим образом (это пример, не соответствует данным):
Кроме того, среднее время ожидания изменения статуса с отправлено на принятие или отклонение.
Как я могу это сделать?