数据处理视频教程实战专题
(数据去重)
课程地址:
作者:荷露叮咚网络学苑
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 fieldname1,fieldname2) from tablename group by fieldname1, fieldname2 |