2012-01-12 14 views
0

我有一個名爲names的表,其中包含名稱和該名稱的組。如何計算同一個表中的名稱之間的關係?

我想統計任何兩個名字在任何組中出現的次數。

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 2012-01-12 20:33:20

+0

@Oded是的,我添加了一些數據和預期的結果。 – 2012-01-12 20:37:00

+0

爲什麼你在結果中有名字1和名字2?這與您的描述不符。 – Oded 2012-01-12 20:38:11

回答

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 2012-01-12 22:22:24

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

隨意編輯它 - 我想你指的是反引號字段的引號。 – 2012-01-12 22:10:49

相關問題