如何利用sql查找表中的重复数据?

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

分析思路

1.看到“找重复”的关键字眼,首先要用分组函数(group by),再用聚合函数中的计数函数count()给姓名列计数。

2. 分组汇总后,生成了一个如下的表。从这个表里选出计数大于1的姓名,就是重复的姓名;

具体方法

方法一:

第一步:创建一个辅助表,将姓名列进行行分组汇总;

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

第二步:选出辅助表中计数大于1的姓名;

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

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

select 姓名 from	
(	
 select 姓名, count(姓名) as 计数	
 from 学生表	
 group by 姓名	
) as 辅助表	
where 计数 > 1;

方法二:

select 姓名	
from 学生表	
group by 姓名	
where count(姓名) > 1;

执行此语句会发现报错了,此时,查询相关资料发现,where子句无法与聚合函数一起使用,因为where子句的运行顺序排在第二,运行到where时,表还没有被分组;

如果要对分组查询的结果进行筛选,可以使用having子句:

select 姓名	
from 学生表	
group by 姓名	
having count(姓名) > 1;

拓展

找出重复出现n次的数据。只需要改变having语句中的条件即可:

select 列名	
from 表名	
group by 列名	
having count(列名) > n;

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值