2014-10-11 114 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