2012-01-12 9 views
0

namesと呼ばれるテーブルがあり、その行にはその名前のグループとそのグループのグループが含まれています。同じテーブル内の名前間の関係を数えるには?

いずれのグループにも2つの名前が一緒に現れる回数をカウントしたいと思います。

name | group 
--------+------ 
Renato | 1 
John | 1 
Paul | 1 
Renato | 2 
John | 2 
John | 3 
Paul | 3 

期待される結果

name 1 | name 2 |count 
--------+--------+----- 
Renato | John | 2 
Renato | Paul | 1 
John | Renato | 2 
John | Paul | 2 
Paul | Renato | 1 
Paul | John | 2 

私はこれをどのように行うことができますか?

+0

データの例と期待される結果は、あなたが意味するものを視覚化するのに役立ちます。 – Oded

+0

@Odedはい、データと予想される結果を追加しました。 –

+0

なぜ結果に 'name 1'と' name 2'がありますか?それはあなたの説明と一致しません。 – Oded

答えて

1
SELECT n1.name AS "name 1", n2.name AS "name 2", 
    COUNT(*) AS "count" 
FROM "names" AS n1 
JOIN "names" AS n2 
    ON n1.group = n2.group 
WHERE n1.name <> n2.name 
GROUP BY n1.name, n2.name 
+0

@a_horse_with_no_name:編集済み – BAK

1
SELECT 
    lefttbl.name as name_1, 
    righttbl.name as name_2, 
    count(*) as together_count 
FROM 
    xx AS lefttbl 
    INNER JOIN xx AS righttbl on lefttbl.group=righttbl.group 
WHERE lefttbl.name<>righttbl.name 
GROUP BY name_1,name_2 
; 

目的の構造が得られます。私は引用符の必要性を排除するためにSQLを更新しました。引用符の不一致を正しく認識できるものの、それを訂正することはできません。

+0

気軽に編集してください - フィールドクォートのバッククォートを参照してください。 –

関連する問題