如何查找重复数据?
【题目】
编写一个SQL查询,查找学生表中所有重复的学生名。
【解题步骤】
-
方法一
1)创建一个辅助表,将姓名列进行行分组汇总
select 姓名, count(姓名) as 计数 from 学生表 group by 姓名;
2)选出辅助表中计数大于1的姓名
select 姓名 from 辅助表 where 计数 > 1;
3)结合前两步,将“创建辅助表”的步骤放入子查询
select 姓名 from ( select 姓名, count(姓名) as 计数 from 学生表 group by 姓名 ) as 辅助表 where 计数 > 1;
结果:
-
方法二
这时候有的同学可能会想,为什么要这么麻烦创建一个子查询,不能用这个语句(将count放到where字句中)直接得出答案吗?
select 姓名 from 学生表 group by 姓名 where count(姓名) > 1;
如果我们运行下这个sql语句,会报下面的错误,问题出在哪里呢?
如果要对分组查询的结果进行筛选,可以使用having子句。所以,这道题的最优方法如下:
select 姓名 from 学生表 group by 姓名 having count(姓名) > 1;
【本题考点】
1)考察思路,有两种解题方法,但是使用having语句的方法更高效。
2)考察对having语句的掌握,很多人会把聚合函数写到where子句中。
3)熟记SQL子句的书写顺序和运行顺序
【举一反三】
本题也可以拓展为:找出重复出现n次的数据。只需要改变having语句中的条件即可:
select 列名 from 表名 group by 列名 having count(列名) > n;