我想找到一个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
查询
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)
归档时间: |
|
查看次数: |
826 次 |
最近记录: |