postgresal去重_postgresql数据库去重方法

postgresal去重_postgresql数据库去重方法数据库去重有很多方法,下面列出目前理解与使用的方法第一种通过groupby分组,然后将分组后的数据写入临时表然后再写入另外的表,对于没有出现再groupby后面的field可以用函数max,min提取,效率较高–适合情况:这种情况适合重复率非常高的情况,一般来说重复率超过5成则可以考虑用这个方法–优点:对于重复率高的数据集的去重,十分推荐用这种方法–缺点:uuid不能用max或min提取…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

数据库去重有很多方法,下面列出目前理解与使用的方法

第一种

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

–适合情况:这种情况适合重复率非常高的情况,一般来说重复率超过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);

第六种,对于不同的情况,不同的数据量级,可以配合使用以上五种方法,灵活使用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187204.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 用Erlang实现Time Wheel

    用Erlang实现Time Wheel

  • gimp中文版教程_GIMP中文教程.pdf

    gimp中文版教程_GIMP中文教程.pdfGimp中文教程(一)KangJS28年12月一.一.阴影(DropShadow)关键点:3个图层:1.背景图层(透明)2.阴影图层3.实景图层主要命令:路径(B),油漆桶填充(shift+B),混合填充(L),移动(M),滤镜–>高斯模糊操作流程:1.CTRL+N新建一个透明图层2.复制一个阴影图层,使用路径工具在此图层上勾画一个封闭路径并转为选区.3.复制阴…

  • Protostuff使用示例

    Protostuff使用示例Protostuff使用示例1、引入Maven依赖的JAR包<dependency><groupId>io.protostuff</groupId><artifactId>protostuff-core</artifactId>

  • Java的注解

    Java的注解一、注解的概念:注解并不是一开始就有的,JDK5之前是没有注解的,JDK5及其以后JDK版本才开始支持Java注解!Java注解(Annotation)也叫做元数据,以@注解名在代码中存在,它是一种在源代码中标注的特殊标记,可以标注源代码中的类、属性、方法、参数等代码,主要用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。1.1Java注解按照含有参数的个数分为三种:不带参数,语法结构为:@Annotation,例如@FunctionalInterface;带一个参数的注解,语

  • kettle工具的作用和使用「建议收藏」

    kettle工具的作用和使用「建议收藏」最近公司一个同事离职,由我来接手他手上的一个项目,我负责开发后台,因为设计到脚本统计数据,需要做定时任务将日表数据统计到月表或者年表。于是该项目用到了Kettle,用了之后才发现,这是个好东西啊。一.了解Kettle工具Kettle最早是一个开源的ETL工具,以Java开发,支持跨平台运行,其特性包括:支持100%无编码、拖拽方式开发ETL数据管道;可对接包括传统数据库、文件、大数据平台、接口、流数据等数据源;支持ETL数据管道加入机器学习算法。二.Kettle下载和安装1.官网下载地址:https

    2022年10月16日
  • pycharm安装包的操作路径「建议收藏」

    pycharm安装包的操作路径「建议收藏」

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号