我正在尝试找到一个 MySQL 查询,它将在特定字段中找到不同的值,计算该值在 2 个字段(1_user、2_user)中出现的次数,然后按计数对结果进行排序。
示例数据库
+------+-----------+-----------+ | 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
解释
在第一列列出所有用户。
SELECT 1_user AS USER FROM test
将它们与第二列中的用户合并。
UNION ALL
SELECT 2_user FROM test
这里的技巧是 UNION ALL保留重复值。
剩下的很简单——从子查询中选择你想要的结果:
SELECT user, count(*) AS count
按用户汇总:
GROUP BY user
并规定顺序:
ORDER BY count DESC
关于php - 计算 2 个字段中不同值的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12017271/