Excel批量导入如何做数据去重
来源:互联网 发布:国金证券待遇 知乎 编辑:程序博客网 时间:2024/05/17 03:40
大数据量总是离不开数据去重,去重分为几种类型,有些是部分字段相同,有些是全部字段相同,那么应该如何做到高效去除重复呢?
小编在这里简单介绍两种去重方式,一种是Sql语句去重,一种是Linq语句去重,其实原理很像,只不过用的方式不太一样而已。
Sql语句去重
假设现在有一个表名为People,里面有三个字段,id、name、age。另外一个表名为Department,有三个字段为id、name、peopleId。
1、单表查询,查询People表中所有不同的年龄
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">select distinct age from People</span></span>假如表中的年龄为23、24、23、25、23,用上面的语句查出来的结果就是23、24、25。
2、查找表中多余的重复记录,重复记录为单个字段(peopleId)
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">select * from Department where peopleId in (select peopleId from people group by peopleId having count(peopleId)>1)</span></span>
3、对于完全重复的记录的删除
如果表中有些记录完全一样,可以先将查询的记录放在一个临时表中,将原来的表记录删除,最后将临时表的数据导回原来的表中
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">create table 临时表 as (select distinct * from 原来表);delete from 原来表;insert into 原来表(select * from 临时表);delete from 临时表;</span></span>
这些都是在对数据库进行操作的时候进行的去重,如何在向数据库写入之前进行去重操作呢,这就需要Linq语句去重,使得写入数据就是不重复的。
Linq语句去重
1、给Dictionary去重,去重后将不重复的值赋给List
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">Dictionary<string, string> dicStaffSerieas = new Dictionary<string, string>();//查询dicSerieas得到字典staffSerieas(教师名,系别名)foreach (YzStaffEntity staff in staffList){ if (dictSeries.ContainsKey(staff.SeriesID)) { dicStaffSerieas.Add(staff.StaffName, dictSeries[staff.SeriesID]); //将教师名和教师所在的系别ID放在Dictionary中 }}//去重List<string> serieasName = new List<string>(); //去重后接收数据的Listvar v = from arr in dicStaffSerieas.Values //dictionary中保存values的数组 group arr by arr into g select new { g.Key };foreach (var r in v){ serieasName.Add(r.Key); //将去重后的数据放到List中}</span></span>
假设还是上面的表People,用Distinct方法为:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">List<string> nameList = new List<string>;nameList=people.Select(p=>p.name).Distinct().ToList();</span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">var query = people.DistinctBy(p => new { p.Id, p.Name });</span></span>
4、用GroupBy方法去重
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">List<Person> distinctPeople = allPeople .GroupBy(p => new {p.Id, p.Name} ) .Select(g => g.First()) .ToList();</span></span>
总结
数据去重不是一件繁琐的事情,不过也是现在看来。最一开始做项目时,我所做的数据去重是从数据库中查出后,在前面进行去重,将不重复的数据循环放到另一个容器,再从另一个容器进行接下来的操作,这样一下就影响了效率,一旦数据库中数据特别多时,需要做去重的逻辑很复杂时,循环起来就会特别慢,就会特别影响性能。
0 0
- Excel批量导入如何做数据去重
- thinkphp导入Excel去重
- excel批量导入数据
- excel数据批量导入
- excel批量导入数据
- excel批量导入数据
- excel批量导入数据
- excel批量导入数据
- excel数据批量导入
- wecenter二次开发系列(一)——使用excel插件批量导入去重的bug
- 如何使用Excel表格导入数据批量开票
- 批量导入Excel中的数据
- Excel批量数据导入Oracle
- EXCEL批量导入数据MVC
- excel模板批量导入数据
- SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据
- Excel两列数据去重
- EXCEL技能之数据去重
- POJ 3348 Cows (凸包+求面积)
- BASE64转换,内含:IOS自带DES加解密
- Hdu 1179(匈牙利算法)
- JAVA-工厂方法设计模式
- Andriod SDK Manager下载解决方法
- Excel批量导入如何做数据去重
- 20151211linux系统日常管理第五部分(scp )
- android 获取应用程序包名,图标,入口Activity类
- POJ-3086
- 持续集成的意义及hudson&maven
- python把文件夹/子文件夹内的图片导到指定文件夹
- 项目程序的守护进程
- online_judge_1039
- bzoj 1208 [HNOI2004]宠物收养所 Splay