资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

PostgreSQL去重的方法有哪些-创新互联

创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!

创新互联拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的成都网站制作、网站设计、网站维护、服务器托管解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、商城网站定制开发、政府网站等各类型客户群体,为全球1000多家企业提供全方位网站维护、服务器维护解决方案。

小编给大家分享一下PostgreSQL去重的方法有哪些,相信大部分人都还不怎么了解,因此分享这边文章给大家学习,希望大家阅读完这篇文章后大所收获,下面让我们一起去学习方法吧!

PostgreSQL怎么去重

方法一:

通过group by分组,然后将分组后的数据写入临时表然后再写入另外的表,对于没有出现再group by后面的field可以用函数max,min提取,效率较高

推荐:PostgreSQL教程

--适合情况:这种情况适合重复率非常高的情况,一般来说重复率超过5成则可以考虑用这个方法

--优点:对于重复率高的数据集的去重,十分推荐用这种方法

--缺点:uuid不能用max或min提取,如果需要去重的数据集中包含uuid则十分尴尬

create temp table tmp_data1 as
select [field1],[field2]...,max(field_special),min(field_special) from group by [field1],[field2]...;
insert into [table] select * from tmp_data1;

 方法二:

通过union去除完全重复的行,效率较高

--适合情况:这种方法只适合去除完全重复的行

select * from table1
union
select * from table1;

方法三:

通过group by加id加not in,即先用group by分组,然后取出该分组下大或最小的id组成集合,然后配合not in过滤掉重复的数据,效率很低,可以尝试配合临时表(测试发现依旧很慢)

--适合情况:由于该种方法效率很低,所以不推荐使用,如果数据量不大的情况下可以用这种方法,数据量只要上了100万就会很慢很慢

delete from [table] where id not in (select max(id) from table1 group by [field1],[field2]...);

方法四:

通过group by加having加in,即先用group by分组,然后用having count(*)>1取出分组数量大于1的行(即重复的行),然后用in删除重复行,效率较高

--适合情况:一条数据大概只有一到两三条重复,这种方法一次只能删除重复数据的一条,如果有些数据有几百次重复那就会累死,其实也可以使用函数做一个循环,但这样的效率就不高了

delete from [table] where id in (select max(id) from [table] group by [field1],[field2]... having count(*)>1);

方法五:

使用窗口函数加id,即可以使用窗口函数将数据分组,并将每个分组按行排号,并将行号与id(唯一id)存入一个集合里,这样就可以根据这个集合来取处重复行的id,即通过行号>1,

-- 然后根据id删除重复行,效率很高(100万数据,重复9万,时间: 14.596s)

--适合情况:该种方法效率很高,特别推荐使用,但需要了解窗口函数以及其中的一些关键词的意义

--row_number() 为返回的记录定义个行编号

--over 与row_number()函数配套使用

--partition by [field1],[field2]... 根据指定的字段分组

delete from [table] where id in (select id from (select row_number() over (partition by [field1],[field2]...), id from [table]) as t where t.row_number>1);

以上是PostgreSQL去重的方法有哪些的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联-成都网站建设公司行业资讯频道!


当前名称:PostgreSQL去重的方法有哪些-创新互联
文章网址:http://cdkjz.cn/article/gggss.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220