数据处理视频教程实战专题

(数据去重)

 

 

 

 

课程地址:http://edu.51cto.com/course/course_id-2131.html 

 

 

作者:荷露叮咚网络学苑

http://heludd.blog.51cto.com/

2014.5 北京






由于系统建设问题,用户操作问题,接口问题等都会产生一些重复数据,当然有些是合理的冗余。例如:系统程序未做唯一性约束(JS限制,数据库约束),用户双击提交按钮时就提交了两次,或者跨系统接口数据传输,只能追加数据。

当然,还有其它各种原因。

 处理方法:查看重复数据、查看不重复数据、删除重复数据。

 本课程讲解如何用Excel与数据库(以Oracle为例)进行数据查重、去重(去重有时需要取第一条记录,有时需要取最新一条记录,视不同应用情景采取不同方法)。

1. EXCEL处理重复数据

重复数据情况:单字段、多字段、全部字段。

1.1.  直接删除法:

数据->数据工具->删除重复项(直接删除,但无法查看重复数据)

(可以选择单列或连续的多列进行操作)

1.2.  高级筛选法:

1)只选择(查看、不删除)不重复的数据:

数据->排序和筛选中的高级->弹出高级筛选对话框,设置列表区域和条件区域,并勾选“选择不重复记录” ->确定。

2)显示重复数据:

选择“条件格式”->“突出显示单元格规则”->“重复值”

选出重复值后再人工手动判断保留哪些数据,删除哪些数据。

1.3.  通过公式查询:

查重复:

IF(COUNTIF(A:A,A2)>1,"重复","")

或者:

先排序再用公式IF(A2=A1, "重复","")

共计出现几次:

=COUNTIF(B:B,B4)

第几次出现:

=COUNTIF($B$2:B2,B2)

是否为最新记录:

=IF(G2=F2,"","")    第几次出现与共计出现几次相等时,为最新记录。

提示:多字段可用“&”合并成一字段进行操作哦;

Excel2013能支持100万条记录,但对机器内存要求高,数据量大容易死机。另外CSV格式文件支持数据量更大(但只支持单个sheet

 

 

 

 

 

2. ORACLE处理重复数据常用方法

2.1.  DISTINCT查询不重复的数据

1)只选择单一字段去重:

select distinct fieldname  from tablename

2)多字段去重:

select distinct fieldname1,  fieldname2 from tablename

3)全部字段去重:

select distinct * from tablename

2.2.  删除重复记录的方法:

1)新建一张表,把原来的表删除

Create table newtablename as select distinct * from tablename;

Drop table oldtablename;

Rename table newtablename to oldtablename;

2)直接删除重复数据(重要数据不建议直接删除,需在扩展环境下做,或提前备份)

Delete from newtablename where newtablename.fieldname1 not in ()

提示:在ORACLE中,多字段可用“||”合并字符串进行处理哦。

 

2.3.  SQL: Group by

1)查看重复记录(一字段重复):

select * from  tablename where fieldname in (select  fieldname from tablename group by  fieldname having count(fieldname)  > 1)

或者

select fieldname1,fieldname2,count(distinct  fieldname2) from tablename group  by fieldname2

2)查看重复记录(多字段重复):

SELECT tablename.fieldname1,tablename.fieldname2,tablename.fieldname3

FROM tablename  RIGHT OUTER JOIN

           (SELECT fieldname1, fieldname2

          FROM tablename

          GROUP BY fieldname1, fieldname2

          HAVING COUNT(fieldname1) > 1 AND COUNT(fieldname2) > 1) T ON tablename.fieldname1  = T.fieldname1 AND tablename.fieldname2  = T.fieldname2

或者

select fieldname1,fieldname2,fieldname3  count(distinct fieldname1fieldname2) from tablename  group by fieldname1, fieldname2