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);

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

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

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

(0)
上一篇 2022年10月1日 上午9:46
下一篇 2022年10月1日 上午9:46


相关推荐

  • 报关单上常出现的英文单词缩写是_报关单用英文怎么说

    报关单上常出现的英文单词缩写是_报关单用英文怎么说  一.单证(Documents)  进出口业务涉及的单证总的包括三大类:1。金融单证(信用证、汇票、支票和本票)  2.商业单证(发票、装箱单、运输单据、保险单等)3。用于政府管制的单证(许可证、原产地证明、商检证等) declarationform报关单 Threesteps—declaration,examinationofgoodsandreleaseofgoods,

    2026年2月5日
    4
  • android之layout_toLeftOf和layout_toRightOf出现的错误

    错误是这样的,布局文件如下,总是在SeekBar里面的这一句android:layout_toLeftOf=”@id/voice_max”报错,差点气得我吐血,明明没有错误的. 

    2022年3月9日
    53
  • SOAP协议详解「建议收藏」

    SOAP协议详解「建议收藏」一.概念:SOAP:简单对象访问协议,是交换数据的一种协议规范,它是一个轻量级\简单的\基于xml的协议;它被设计成在WEB上交换结构化的和固化的信息。二.相关定义1.基于类对象的传输协议;2.SOAP封装(envelop),它定义了一个框架,描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们;3.SOAP编码规则(encodingrules),它定义了一种序列化机制,用

    2022年7月12日
    38
  • js刷新当前页面的方法_javascript高级编程教程

    js刷新当前页面的方法_javascript高级编程教程javascriptrefreshpage几种页面刷新的方法本节内容:Javascript刷新当前页面的方法与实例。window.location.reload(),window.histo

    2022年8月6日
    8
  • Matlab眼图

    Matlab眼图clear clc closeall 参数设定 L 25 二进制码元数 SamPerSyb 20 每个符号点样点数 Ts 2 码元宽度 Rs 1 Ts 码元速率 fs SamPerSyb Rs 采样率 eyeNum 5 眼图眼睛数量 信源 a rand L 1 an zeros L 1 forn 1 Lifa n amp

    2026年3月17日
    1
  • Linux新手入门教程

    Linux新手入门教程下面给你讲解新手第一次接触 Linux 操作系统一 学习 Linux 1 Linux 系统 Linux 命令 ssh websever apache MySQL 缓存 PHP Python java 必备服务 2 Linux 能做什么 企业服务器 嵌入式开发 3 Linux 的学习方法 强迫自己一个学习环境 给自

    2026年3月26日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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