SQLite:如何统计用户在UserA与UserB列中的总出现次数?
解决方案:统计用户在两列中的总出现次数
要解决这个问题,核心是把user A和user B两列的用户数据整合到同一列中,再进行分组计数。直接按单列分组肯定满足不了需求,得先把两列的所有用户条目合并起来,具体SQL实现如下:
SELECT user, COUNT(*) AS total_count FROM ( -- 提取user A列的所有用户记录 SELECT "user A" AS user FROM your_table_name UNION ALL -- 提取user B列的所有用户记录,UNION ALL会保留所有重复项,正好满足计数需求 SELECT "user B" AS user FROM your_table_name ) AS combined_users GROUP BY user ORDER BY total_count DESC;
关键细节说明:
UNION ALL的作用:和UNION不同,它不会自动去重,这样每个用户在两列中的每一次出现都会被保留,确保计数准确。如果用UNION的话,会丢失重复的条目,统计结果就错了。- 子查询的意义:先通过子查询把两列数据合并成一个包含所有用户的单列结果集,外层查询再对这个结果集分组统计。
- 排序优化:最后加上
ORDER BY total_count DESC,可以让结果按出现次数从高到低排列,和你期望的输出顺序完全匹配。
用你提供的样本数据测试的话,子查询会生成这样的中间结果:
john ron ron john john kyle
分组统计后就得到:john 3、ron 2、kyle 1,完全符合需求。
注意:记得把SQL里的your_table_name替换成你实际使用的表名哦。
内容的提问来源于stack exchange,提问作者calcMan
相关产品推荐
相关产品推荐

