SQL查询重复数据和清除重复数据 整理

Excel数据高效导入SQL数据库工具解析 数据类型的选择直接影响数据库的存储效率和性能。应根据实际业务需求选择合适的数据类型及长度。 阅读详情

选择重复,消除重复和选择出序列

有例表:emp

emp_no   name    age    
    001           Tom      17    
    002           Sun       14    
    003           Tom      15    
    004           Tom      16

要求:

列出所有名字重复的人的记录

(1)最直观的思路:要知道所有名字有重复人资料,首先必须知道哪个名字重复了:

select   name   from   emp       group   by   name     having   count(*)>1


 所有名字重复人的记录是:

select   *   from   emp
    where name   in   (select   name   from   emp group   by   name having count(*)>1)

(2)稍微再聪明一点,就会想到,如果对每个名字都和原表进行比较,大于2个人名字与这条记录相同的就是合格的 ,就有

select   *   from   emp   where   (select   count(*)   from   emp   e    where   e.name=emp.name)   >1

--注意一下这个>1,想下如果是 =1,如果是 =2 如果是>2 如果 e 是另外一张表 而且是=0那结果 就更好玩了:)

这个过程是 在判断工号为001的 人 的时候先取得 001的 名字(emp.name) 然后和原表的名字进行比较 e.name

注意e是emp的一个别名。

再稍微想得多一点,就会想到,如果有另外一个名字相同的人工号不与她他相同那么这条记录符合要求:

select   *   from   emp    
    where   exists    
                  (select   *   from   emp   e    where   e.name=emp.name   and   e.emp_no<>emp.emp_no)

 此思路的join写法:

select   emp.*       from   emp,emp e
        where emp.name=e.name and emp.emp_no<>e.emp_no/**/
/*     这个语句较规范的   join   写法是    
select emp.* from   emp   inner join emp   e     on emp.name=e.name and emp.emp_no<>e.emp_no    
但个人比较倾向于前一种写法,关键是更清晰     */    
b、有例表:emp    
name     age    
Tom       16    
Sun        14    
Tom       16    
Tom       16

----------------------------------------------------清除重复----------------------------------------------------
过滤掉所有多余的重复记录
(1)我们知道distinct、group by 可以过滤重复,于是就有最直观的
 
select   distinct   *   from   emp     或     select   name,age   from   emp   group   by   name,age

获得需要的数据,如果可以使用临时表就有解法:
 
select   distinct   *   into   #tmp    from   emp  
    delete   from   emp  
    insert   into   emp   select   *   from   #tmp

(2)但是如果不可以使用临时表,那该怎么办?
我们观察到我们没办法区分数据(物理位置不一样,对 SQL Server来说没有任何区别),思路自然是想办法把数据区分出来了,既然现在的所有的列都没办法区分数据,唯一的办法就是再加个列让它区分出来,加什么列好?最佳选择是identity列:
 
alter   table   emp   add   chk   int   identity(1,1)

 表示例:
 
name   age   chk    
    Tom     16     1    
    Sun      14     2    
    Tom     16     3    
    Tom     16     4

重复记录可以表示为:
 
select   *   from   emp where (select   count(*)   from   emp   e   where   e.name=emp.name)>1

 要删除的是:
 
delete   from   emp
    where (select   count(*)   from   emp   e     where   e.name=emp.name   and   e.chk>=emp.chk)>1
 
再把添加的列删掉,出现结果。
 
alter   table   emp   drop   column   chk

 
(3)另一个思路:
视图
 
select   min(chk) from   emp group   by   name having   count(*)   >1

 获得有重复的记录chk最小的值,于是可以
 
delete from   emp where chk   not   in (select min(chk) from   emp group   by   name)

写成join的形式也可以:
 
(1)有例表:emp
 
emp_no    name    age    
    001            Tom      17    
    002            Sun       14    
    003            Tom      15    
    004            Tom      16

 ◆要求生成序列号
(1)最简单的方法,根据b问题的解法:
 
alter   table   emp   add   chk   int   identity(1,1)   或  
    select   *,identity(int,1,1)   chk   into   #tmp   from   emp

 ◆如果需要控制顺序怎么办?
 
select   top   100000   *,identity(int,1,1)   chk   into   #tmp   from   emp   order   by   age

 (2) 假如不可以更改表结构,怎么办?
如果不可以唯一区分每条记录是没有办法的,在可以唯一区分每条记录的时候,可以使用a 中的count的思路解决这个问题
 
select   emp.*,(select   count(*)   from   emp   e   where   e.emp_no<=emp.emp_no)  
    from   emp  
    order   by   (select   count(*)   from   emp   e   where   e.emp_no<=emp.emp_no)

 

 

经常面试到的SQL题(查询重复数据和清除重复数据) 经常面试到的SQL题(查询重复数据和清除重复数据). 立即下载

相关推荐

sql语句查询解决group by 统计重复数据问题个人总结

通常情况下我们写sql语句主键都是唯一的不会出现id重复的问题。如: 查询表table1的所有数据 select * from table1 会显示出table1中所有字段列表。 select count(*) as count from table1 统计table表中数据总数也不会有问题。 但是如果使用的分组group by那么问题就会出现统计不准的问题 select count(*) from table1 where status=1 返回结果 但是如果这样写就会按分组统计总数,不是我们想要的结果如下: select count(*) from table1 where status

SQL查询重复数据和清除重复数据

选择重复,消除重复和选择出序列 有例表:emp emp_no   name    age         001           Tom      17         002           Sun       14         003           Tom      15         004           Tom      16 要求: 列出所有名字

ZHOUJIAOSHOU的专栏 1196

使用pytorch构建LSTM_AE模型的两种方式

2.基本LSTM_Unit计算——基本LSTM_AE结构 3.自定义LSTM_Unit计算——自定义LSTM_AE结构 1.LSTM-Encoder-Decoder模型结构及简要解析 图基本lstm计算单元

qq_37840762的博客 7275

sql使用自连接去重复查询

查询公司与公司最新刷新的一条信息 select t1.userid,t1.id,t1.title,t1.RegType,t1.Salary,t1.SubjectID,t1.RefreshTime,t2.name,t2.logo,t2.[address],t2.CreateTime from info t1 inner join companyinfo t...

weixin_30699831的博客 591

Oracle EBS R12 AP模块发票导入接口实战:从SQL插入到API调用的完整流程

本文详细解析了Oracle EBS R12 AP模块发票导入接口的完整流程,从SQL插入到API调用的实战技巧。涵盖接口表设计、数据验证、双通道导入机制及错误诊断,特别分享官方文档未提及的高阶优化方案,助力企业实现财务数字化转型。

weixin_33728268的博客 477

华大HC32F460从零到200MHz:手把手教你配置时钟系统(附避坑指南)

本文详细解析了华大HC32F460 MCU的时钟系统配置,从启动过程、时钟树分析到实战配置200MHz系统时钟。文章手把手指导开发者如何正确配置外部晶振、MPLL锁相环及总线分频,并提供了硬件检查、代码解读及常见问题排查的避坑指南,帮助用户从零构建稳定可靠的高性能时钟环境。

net55的博客 297

09-sql语句中查询重复的数据次数并去重

sql去重,并查询重复次数

qq_42397932的博客 1735

CCS配置MSPM0G3507(七) 编码器(TIMER-QEI)

1.选择时钟源 BUSCLK2.时钟分频配置为1分频3.分频系数配置为14.若勾选 Start ,则生成程序后会自动开启定时器的计数,否则需手动在程序中开启5.Load Value 设置为65535。

kaneki_lh的博客 1万+

SQL 查询重复数据的方法总结

SQL 查询重复数据的方法总结

eagle89的专栏 2万+

C语言试题三之计算并输出 s=1+(1+2^(0.5))+(1+2^(0.5)+3^(0.5))+…+(1+2^(0.5)+3^(0.5)+…+n^(0.5))

1 、题目 计算并输出 s=1+(1+2^(0.5))+(1+2^(0.5)+3^(0.5))+…+(1+2^(0.5)+3^(0.5)+…+n^(0.5)) 2、部分函数说明 C 库函数 double pow(double x, double y) 返回 x 的 y 次幂。 3、源代码实现 #include <stdio.h> #include <...

码莎拉蒂 4609

[Python人工智能] 三十六.基于Transformer的商品评论情感分析 (2)keras构建多头自注意力(Transformer)模型

本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章利用Keras构建深度学习模型并实现了情感分析。这篇文章将介绍Transformer基础知识,并通过Keras构建多头自注意力(Transformer)模型,实现IMDB电影影评数据情感分析。基础性文章,希望对您有所帮助!...

杨秀璋的专栏 4910

sql中删除数据的几种方式

1

weixin_53095391的博客 2万+

详解大模型微调数据集构建方法(持续更新)

本文详细介绍了大模型微调数据集构建方法,希望能对学习大模型的同学们有所帮助。 文章目录 1. 前言 2. 微调数据集构建方法 2.1 方法一 2.2 方法二 2.3 方法三 2.4 方法四 2.5 方法五

herosunly的博客 28万+

Mysql 整理重复数据

表结构: 插入数据: insert into test(school_id,school_name,total_student,test_takers) values(1239,“abraham lincoln high school”,55,50),(1240,“abraham lincoln high school”,70,35),(1241,“acalanes high school”,120,89),(1242,“academy of the canyons”,30,30),(1243,“agou

Now do it 325

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SQL Server 一列或多列重复数据的查询,删除

一般的后台程序基本上都会遇到和数据库交互的情况,在这种情况里面又会碰到数据库表数据的去重需求,鉴于此,我把自己在项目中遇到的情况做了一个整理,方便自己以后查看,也希望能给看到这边文章的你提供一个思路,闲话就不扯了,直接上干货…… 数据库为 mssql 08 r2 其中表的结构和数据如下图: 查询表中单列重复 一.带有having条件的分组查询方法 (1)查询某

fairystepwgl 的专栏 3765

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Oracle 查询并删除重复记录的SQL语句

ORACLE重复数据的查询与删除是我们经常会遇到并且需要处理的问题,虽然经常有用到,方法也很多.但是并不想整理出来,因此转贴相关文章供参考.出处:  http://www.cnblogs.com/luohoufu/archive/2008/06/05/1214284.html  查询并删除重复记录的SQL语句 查询及删除重复记录的

langcai1981的专栏 3810

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蛙蛙推荐:整理了一些SQL数据库技巧,贴一下

蛙蛙推荐:整理了一些SQL数据库技巧,贴一下 一.怎样删除一个表中某个字段重复的列呀,举个例子表[table1]id    name1 aa2 bb3 cc1 aa2 bb3 cc我想最后的表是这样的id    name1 aa2 bb3 cc回答:将记录存到临时表#t中,重复的记录只存一条,然后将临时表#t中的记录再存回原表中,注意“select distinct id,class,name”要

蛙蛙池塘 2285

mysql --- sql 语句大全 || 索引 || 储存函数+过程+触发器+视图

查询 简单查询 语法:Select * |列名 from 表名 Select * from ws_user; #查询所有 Select username from ws_user; #只查询username列 Select username,password from ws_user; ...

ws - 兮的博客空间 1771

sql 同一表里同一列重复数据合并另一列数据相加_Excel还能这样用?四步汇总多个表格数据,再也不用复制到手酸...

正值年中,老板交代把上半年各个地区提交的数据表格做个汇总。怎么办?一个地区一张表打开华南区的表,复制】-打开汇总表-【粘贴】再打开华北区的表【复制】-打开汇总表-【粘贴】……类似的工作任务还真不少各个单位上交的报名表各部门的生产计划数据各个月的销售数据表怎么汇总到一张表上?一遍又一遍的重复操作,肯定能干完!可是,这样「搬砖」真的一点技术含量都没有,还无聊透顶!如果有100张表,还能把手整残!汇总多...

weixin_39978696的博客 933

SQL面试通关秘籍:面试知识点+技巧分享!

点击上方“民工哥技术之路”,选择“设为星标”回复“1024”获取独家整理的学习资料!SQL是用于数据分析和数据处理的最重要的编程语言之一,因此与数据科学相关的工作(例如数据分析师、数据科...

民工哥的博客 923

处理表重复记录(查询和删除)

  今天遇到一个筛选重复记录的问题,搜索出一篇文章不错,收藏一下,与大家共享啦 哈哈:   --处理表重复记录(查询和删除) /************************************************************************************************************************************...

阿阳天 153

SQL Server 数据库基础笔记分享(上)

前言 本文是个人学习SQLServer数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解。 注:内容比较基础,适合入门者对SQL Server数据库的了解!!! 正文 1.主键: 主键的作用:保证表中的每条数据的唯一性 特点: 主键不能重复 不能为空 分类: 逻辑主键:选择为表中增加的那些“自动编号”列...

ayygzpm717040的博客 281

Mysql语句整理

 1、显示当前MySql支持的存储引擎: mysql> show engines; 2、看你的MySQL当前默认的存储引擎: mysql> show variables like '%storage_engine%'; 3、显示表的创建语句: mysql> show create table 表名; 4、显示MySq...

Small_bottle_cap的专栏 273

7个实战案例:掌握SQL数据处理与可视化的完整指南

SQL数据处理与可视化实战是一套面向数据爱好者的开源项目集合,通过真实场景案例帮助你从零掌握SQL数据分析核心技能。该开源项目涵盖数据清洗、探索性分析、时间序列处理等实用场景,无需复杂代码即可快速上手,适合零基础学习者系统提升数据处理能力。 ## 价值定位:为什么选择这个SQL学习方案 ### 构建数据思维:从被动查询到主动分析 传统SQL学习往往停留在语法层面,而本项目通过7个完整案例培养"

gitblog_00131的博客 241
上一篇: VS2010旗舰版 Framework4 Framework3.5 Framework3.0 Framework2.0 目标Framework选择
下一篇: SQL 时间格式函数
Hashxu
博客等级 码龄21年 13粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值