代码之家  ›  专栏  ›  技术社区  ›  Misso

mysql组并计数两列

  •  2
  • Misso  · 技术社区  · 7 年前

    我不知道如何在一个表的两列中对名称进行分组和计数。我的表的结构类似于:

    +------+-------------------+
    | user | friend1 | friend2 |
    +------+---------+---------+
    |user1 | Adam    | Filip   | 
    |user2 | Boris   | Norbert |
    |user3 | Filip   | Carol   |
    |user4 | Carol   | Filip   |
    |user5 | Boris   | Patricia|
    +------+---------+---------+
    

    我希望得到如下结果:

    +----------+---+
    | Filip    | 3 |
    | Boris    | 2 |
    | Carol    | 2 |
    | Adam     | 1 |
    | Norbert  | 1 |
    | Patricia | 1 |
    +----------+---+
    

    它是按计数排序的。

    我试过这样的方法:

    SELECT friend1 AS friends, friend2 AS friends, COUNT(friends) AS friedscount FROM table GROUP BY friends ORDER BY friedscount DESC
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   John Woo    7 年前

    首先使用合并行 UNION ALL 在子查询中保留重复项,然后计数

    SELECT  friend, COUNT(*) friedscount 
    FROM
            (
                SELECT  friend1 AS friend FROM TableName UNION ALL
                SELECT  friend2 AS friend FROM TableName
            ) a
    GROUP   BY  friend
    ORDER BY friedscount DESC
    

    这里有一个 Demo