2014-10-11 146 views
2
Sample Table 
User1 | User2 
123, 555 
123, 1 
123, 2 
456, 2 
555, 456 
12, 123 
12, 456 

輸入:我輸入列表(123,456)查看包含這些值的行。然後,我希望MySQL檢查該行中的相反/其他列,然後按照該值對輸出進行分組。按列分組

輸出:

User | Count(*) 
555, 2 
2, 2 
1, 1 

555計數2,因爲行123, 555和行555, 456都包含一個輸入:123和456

我試着看CASE關鍵字,因爲這裏的一個明顯的障礙是抓住相反的/剩餘的列並將其用作返回值之一。

完全錯誤,但我的一半完成的方法。

SELECT user, count(*) from friendships 
WHERE User1 in (123,456) as user or User2 in (123,456) as user 
+2

嘗試 – antlersoft 2014-10-11 21:27:10

回答

3

這個棘手的部分是你的標準是IN()正在尋找在用戶1列,然後試圖找到重複的用戶2列...所以你需要有工會加入

使用嵌套查詢與所述內部查詢是每兩個查詢的聯合與一組由
SELECT user2, COUNT(*) 
FROM 
( SELECT user1, user2 
    FROM friends f 
    WHERE f.user1 IN(123, 456) 

    UNION ALL 

    SELECT f.user1, f.user2 
    FROM friends f 
    JOIN friends f1 ON f1.user1 = f.user2 
    WHERE f.user1 IN(123, 456) 
)t 
GROUP BY user2; 

WORKING FIDDLE