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>


2、Distinct方法去重

假设还是上面的表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>


3、DistinctBy方法去重

<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
原创粉丝点击