次のクエリは、グラフ内の2つのノードの共通隣人カウント:それは例えばので、user1とuser2のことで呼ばれている一般的な隣人の数を返し、次のグラフ UNIONの代わりにJOINを使用して "A OR B"の近隣を数える方法?
について
DECLARE @monthly_connections_test TABLE (
calling_party VARCHAR(50)
, called_party VARCHAR(50))
INSERT INTO @monthly_connections_test
SELECT 'z1', 'z2'
UNION ALL SELECT 'z1', 'z3'
UNION ALL SELECT 'z1', 'z4'
UNION ALL SELECT 'z1', 'z5'
UNION ALL SELECT 'z1', 'z6'
UNION ALL SELECT 'z2', 'z1'
UNION ALL SELECT 'z2', 'z4'
UNION ALL SELECT 'z2', 'z5'
UNION ALL SELECT 'z2', 'z7'
UNION ALL SELECT 'z3', 'z1'
UNION ALL SELECT 'z4', 'z7'
UNION ALL SELECT 'z5', 'z1'
UNION ALL SELECT 'z5', 'z2'
UNION ALL SELECT 'z7', 'z4'
UNION ALL SELECT 'z7', 'z2'
SELECT monthly_connections_test.calling_party AS user1, monthly_connections_test_1.calling_party AS user2, COUNT(*) AS calling_calling, 0 AS calling_called,
0 AS called_calling, 0 AS called_called, 0 AS both_directions
FROM @monthly_connections_test AS monthly_connections_test INNER JOIN
@monthly_connections_test AS monthly_connections_test_1 ON
monthly_connections_test.called_party = monthly_connections_test_1.called_party AND
monthly_connections_test.calling_party < monthly_connections_test_1.calling_party
GROUP BY monthly_connections_test.calling_party, monthly_connections_test_1.calling_party
をz1とz2によって呼び出された隣人の数は、z4とz5の両方の呼び出しとして2を返します。
もう1つのことは、user1またはuser2のどちらかによって呼び出される2つのノード(ユーザー)のすべての近隣ノードの数です。たとえば、クエリ(z1、z2) (z1、z2)が観測された対であり、(z3、z4、z5、z6)の要素の数がz1、z2、z3、 、z4、z5、z6)U(z4、z5、z7)は5である。
誰も上記のロジックの結合クエリを変更/作成する方法を知っていますか?
ありがとうございました!
はでスクリプトを持っている方が良いです:1)テーブル及び2)挿入を作成します。データを使って遊ぶのが簡単で、最適な方法をより迅速に見つけることができます。ありがとうございました – Genius
提案ありがとう! –
テーブル名を全長で繰り返すのではなく、短縮形のテーブルエイリアスを使うことを強くお勧めします。 '@monthly_connections_test AS mct'。文脈では、私は 'mct1'と' mct2'、さらには 'm1'と' m2'を使います。これは、SQLをより読みやすくします(また、水平スクロールバーを回避するのに役立ちますが、読みやすさの向上よりもそれほど重要ではありません)。 –