计算2个字段中不同值的出现次数

mou*_*206 4 php mysql

我想找到一个MySQL查询,将在某个领域找到不同的值,算上2场(1_user,2_user)该值出现的号码,然后按顺序计数的结果.

示例db

+------+-----------+-----------+
|   id | 1_user    | 2_user    |
+------+-----------+-----------+
|    1 |       2   | 1         | 
|    2 |       3   | 2         | 
|    3 |       8   | 7         | 
|    4 |       1   | 8         | 
|    5 |       2   | 8         |
|    6 |       3   | 8         |  
+------+-----------+-----------+

预期结果

user       count
-----      -----
8          4
2          3
3          2
1          2

And*_*ndy 6

查询

SELECT user, count(*) AS count
FROM
(
    SELECT 1_user AS USER FROM test

    UNION ALL

    SELECT 2_user FROM test
) AS all_users
GROUP BY user
ORDER BY count DESC
Run Code Online (Sandbox Code Playgroud)

说明

列出第一列中的所有用户.

SELECT 1_user AS USER FROM test
Run Code Online (Sandbox Code Playgroud)

将它们与第二列中的用户组合.

UNION ALL
SELECT 2_user FROM test
Run Code Online (Sandbox Code Playgroud)

这里的技巧是UNION ALL保留重复值.

其余很简单 - 从子查询中选择所需的结果:

SELECT user, count(*) AS count
Run Code Online (Sandbox Code Playgroud)

用户聚合:

GROUP BY user
Run Code Online (Sandbox Code Playgroud)

并订明订单:

ORDER BY count DESC
Run Code Online (Sandbox Code Playgroud)