Таблица month_connections содержит столбцы calling_party, called_party, common_neighbors, neighborhood_overlap
Таким образом, в таблице описано, какие пользователи подключены.Одной из мер для сходства пользователей является перекрытие соседства, которое определяется следующим образом:
окрестность_верла = (количество узлов, которые являются соседями и для Call_party, и для Call_party) / (количество узлов, которые являются соседями вхотя бы один из call_party или named_party)
Пытаясь вычислить количество общих соседей для двух пользователей, я написал следующий запрос:
SELECT
COUNT (*) FROM
(SELECT t1.neighborA
FROM (
SELECT called_party AS neighborA FROM monthly_connections
WHERE calling_party = '9F7334BCF9000CD68D40302DC4801E60C027A7D1'
UNION SELECT calling_party AS neighborA FROM monthly_connections
WHERE called_party = '9F7334BCF9000CD68D40302DC4801E60C027A7D1') t1
INNER JOIN (SELECT called_party AS neighborB FROM monthly_connections
WHERE calling_party = '10D149A4356E1AA3A8AF604BD992BBA141DB53D2'
UNION SELECT calling_party AS neighborB FROM monthly_connections
WHERE called_party = '10D149A4356E1AA3A8AF604BD992BBA141DB53D2') t2 ON t1.neighborA = t2.neighborB) t3
Приведенный выше запрос вычисляет количество общихсоседи пользователей 10D149A4356E1AA3A8AF604BD992BBA141DB53D2 и 9F7334BCF9000CD68D40302DC4801E60C027A7D1
1014 * цель состоит в написании запроса, чтобы установить значение общих соседей столбцов и окрестности перекрытия для каждой пары соединения в таблице 1016 *
кто-нибудь знаетКак написать запрос для обновления столбцов common_neighbors и district_overlap? Для общих соседей я начал писать следующий запрос, но он неверен:
UPDATE mc SET
common_neighbors =
(SELECT COUNT (*) FROM
(SELECT t1.neighborA FROM (SELECT called_party AS neighborA FROM monthly_connections WHERE calling_party = mc.calling_party UNION SELECT calling_party AS neighborA FROM monthly_connections WHERE called_party = mc.calling_party) t1 INNER JOIN (SELECT called_party AS neighborB FROM monthly_connections WHERE calling_party = mc.called_party UNION SELECT calling_party AS neighborB FROM monthly_connections WHERE called_party = mc.called_party) t2 ON t1.neighborA = t2.neighborB) t3) FROM monthly_connections mc INNER JOIN t3 ON t3.calling_party = mc.calling_party AND t3.called_party = mc.called_party