查询4个用户表中至少出现3次的公共重复用户名及计数
多表用户名出现次数统计方案
嘿,针对你这个要从四个表中找出总出现次数至少3次的用户名的需求,我整理了一个清晰的SQL解决方案:
首先,我们需要把四个表的username数据全部合并起来(要保留所有重复记录,所以不能用UNION,得用UNION ALL),然后统计每个用户名的出现次数,最后筛选出符合条件的结果。
最终SQL代码
SELECT username, COUNT(*) AS occurrence_count FROM ( -- 合并四个表的所有username记录 SELECT username FROM visitorA UNION ALL SELECT username FROM visitorB UNION ALL SELECT username FROM visitorC UNION ALL SELECT username FROM visitorD ) AS combined_user_data GROUP BY username -- 筛选出现次数≥3的用户 HAVING COUNT(*) >= 3 -- 按出现次数从高到低排序 ORDER BY occurrence_count DESC;
代码细节解释
- 合并数据:子查询里的
UNION ALL会把四个表的username列全部整合到一个临时数据集里,哪怕同一个用户名在多个表出现,也会全部保留,这是统计总次数的关键。 - 分组统计:
GROUP BY username会把相同用户名的记录归为一组,COUNT(*)就能算出每个组里的记录数,也就是该用户名的总出现次数。 - 筛选结果:
HAVING COUNT(*) >= 3用来过滤出总出现次数至少3次的用户,这里必须用HAVING而不是WHERE,因为WHERE只能在分组前过滤原始数据,而我们需要基于分组后的统计结果来筛选。 - 排序输出:
ORDER BY occurrence_count DESC让结果按出现次数从高到低排列,和你给出的预期输出顺序完全匹配。
执行结果
运行这段SQL后,会得到你想要的结果:
username | occurrence_count ---------|------------------ swapnil | 4 sanjay | 3
内容的提问来源于stack exchange,提问作者compsy
相关产品推荐
相关产品推荐

