如何查找重复数据?

【题目】

编写一个SQL查询,查找学生表中所有重复的学生名。

【解题步骤】

  • 方法一

1)创建一个辅助表,将姓名列进行行分组汇总

select 姓名,count(姓名) as 计数
from 学生表
group by 姓名;

 

 2)选出辅助表中计数大于1的姓名

select 姓名  辅助表
where 计数 > 1;

 

 3)结合前两步,将“创建辅助表”的步骤放入子查询


(
  计数
  学生表
 by 姓名
) 1;

结果:

 

 

  • 方法二

这时候有的同学可能会想,为什么要这么麻烦创建一个子查询,不能用这个语句(将count放到where字句中)直接得出答案吗?

select 姓名
where count(姓名) 1;

如果我们运行下这个sql语句,会报下面的错误,问题出在哪里呢?

如果要对分组查询的结果进行筛选,可以使用having子句。所以,这道题的最优方法如下:

having 1;

【本题考点】

1)考察思路,有两种解题方法,但是使用having语句的方法更高效。

2)考察对having语句的掌握,很多人会把聚合函数写到where子句中。

3)熟记SQL子句的书写顺序和运行顺序

【举一反三】

本题也可以拓展为:找出重复出现n次的数据。只需要改变having语句中的条件即可:

 列名
 表名
count(列名) > n;

 

相关文章

navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...
文章浏览阅读488次。恢复步骤概要备份frm、ibd文件如果mysql...
文章浏览阅读225次。当MySQL单表记录数过大时,增删改查性能...
文章浏览阅读1.5k次。Mysql创建、删除用户MySql中添加用户,新...
MySQL是一种开源的关系型数据库管理系统,被广泛应用于各类应...