统计数据库表中重复冗余条目数的SQL查询问题
问题分析与解决
原SQL的核心问题
- 分组维度错误:你仅按
First_Name分组,但判断重复条目需要同时依据First_Name和Last_Name的组合——同名不同姓的人不能被算作重复,这个逻辑漏洞会导致统计偏差。 - 计算逻辑错误:你统计的是每组的总记录数,但冗余条目是每组总条数减去1(每组第一条是基准,剩下的才是冗余),直接求和总条数自然会比预期多。
正确的SQL语句
要得到预期的结果3,你需要先计算每组的冗余数(count(*) - 1),再对这些冗余数求和:
SELECT SUM(count(*) - 1) AS redundant_count FROM Names GROUP BY First_Name, Last_Name HAVING count(*) > 1;
逻辑验证
Elton John组总共有3条记录,冗余数为3-1=2Mariah Carey组总共有2条记录,冗余数为2-1=1- 两者求和
2+1=3,完全匹配你的预期。
如果需要先查看每组的冗余明细,可以执行以下子查询确认:
SELECT First_Name, Last_Name, count(*) AS total, count(*) - 1 AS redundant FROM Names GROUP BY First_Name, Last_Name HAVING count(*) > 1;
执行后会返回:
| First_Name | Last_Name | total | redundant |
|---|---|---|---|
| Elton | John | 3 | 2 |
| Mariah | Carey | 2 | 1 |
内容的提问来源于stack exchange,提问作者Alyssa
相关产品推荐
相关产品推荐

