求助:如何统计MySQL表中的重复记录数量并查询people表的重复记录及次数
解决MySQL重复记录统计问题
嗨,很高兴能帮你搞定这个统计重复记录的需求!你想要统计people表中姓名+年龄组合的重复次数,这个思路很明确,我们来一步步优化你的SQL语句。
需求回顾
你需要筛选出NAME和AGE组合出现次数大于1的记录,最终得到如下格式的结果:
NAME | AGE | COUNT Max | 21 | 3 Tom | 30 | 2 Jim | 45 | 3
原SQL的冗余点分析
你的初始SQL思路是对的,但存在不必要的冗余:
select name, count(name), age, count(age) FROM people GROUP BY name, age HAVING (COUNT(name) > 1) AND (COUNT(age) > 1) ;
- 因为已经按
name和age分组,每个组内的name和age完全一致,所以count(name)和count(age)的结果是完全相同的,没必要同时统计两个; HAVING子句里的两个条件重复,只要判断一次计数大于1就足够了。
优化后的正确SQL
我们可以简化语句,同时精准匹配你想要的结果格式:
SELECT name, age, COUNT(*) AS `COUNT` FROM people GROUP BY name, age HAVING COUNT(*) > 1;
语句详解
GROUP BY name, age:这是核心逻辑,它会把name和age完全相同的记录归为一组,确保我们统计的是「姓名+年龄」这个组合的重复次数;COUNT(*):用来统计每个分组内的记录数量,也就是该组合的重复次数,用AS COUNT指定列名,和你期望的输出格式完全匹配;HAVING COUNT(*) > 1:过滤掉只出现一次的组合(比如Bob和Nik的记录),只保留重复的分组。
执行这条语句后,就能得到你想要的结果啦!
内容的提问来源于stack exchange,提问作者Massimo
相关产品推荐
相关产品推荐

