按列分组

时间:2014-10-11 21:20:23

标签: mysql

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

1 个答案:

答案 0 :(得分:3)

这个棘手的部分是你的标准是IN()正在查看users1列,然后尝试在user2列中查找重复...所以你需要一个UNION联接

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