La table monthly_connections contient des colonnes calling_party, called_party, common_neighbors, neighborhood_overlap
Comment compter les voisins communs de deux utilisateurs et calculer la similarité?
La table décrit donc les utilisateurs connectés. L'une des mesures de similitude utilisateur est un chevauchement de voisinage qui est défini comme suit:
neighborhood_overlap = (nombre de nœuds qui sont voisins des deux calling_party et called_party)/(nombre de nœuds qui sont voisins au moins l'un des calling_party ou called_party)
Essayer de calculer le nombre de voisins communs pour deux utilisateurs, j'ai écrit la requête suivante:
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
La requête calcule au-dessus du nombre de voisins communs des utilisateurs 10D149A4356E1AA3A8AF604BD992BBA141DB53D2 et 9F7334BCF9000CD68D40302DC4801E60C027A7D1
Le but est d'écrire la requête pour définir la valeur de la colonne communes voisines et se chevauchent de voisinage pour chaque paire de connexion dans la table
Est-ce que quelqu'un sait comment écrire la requête pour mettre à jour les colonnes common_neighbors et neighborhood_overlap?
Pour voisins communs j'ai commencé à écrire la requête suivante mais il est inexact:
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
Vous trouverez plus de gens prêts à passer du temps sur vos questions quand vous apprenez à accepter la réponse « meilleur » et non seulement le « parfait » un – smirkingman