postgresql数据库去重方法

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

 

第一种

通过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://www.cnblogs.com/holden1/p/9946564.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于博主

一所二本院校辍学生。屌丝一枚,曾经搬过砖,怕死于砖头之下遂改学网络。误入歧途, 学***半年,网管做到如今。去网吧报老衲名字保证给你打折。转载于:https://blog.51cto.com/anqyunwei/1323497

php自动报价,使用PHP转换所有类型的智能报价

小编典典您需要这样的内容(假设输入UTF-8,而忽略CJK(中文,日文,韩文)):$chr_map array(// Windows codepage 1252"\xC2\x82" > "", // U0082⇒U201A single low-9 quotation mark"\xC2\x84" &g…

ARM(IMX6U)裸机官方SDK包使用

参考:Linux之ARM(IMX6U)裸机C语言LED驱动实验–驱动编写,编译 作者:一只青木呀 发布时间: 2020-08-11 11:20:17 网址:https://blog.csdn.net/weixin_45309916/article/details/107930284 目录1、I.MX6ULL 官…

h5是什么 www.php.cn,html meta标签的作用是什么?

什么是htmlmeta标签:htmlmeta标签的定义和用法:元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。标签位于文档的头部,不包含任何内容。标签的属性定义了与文档相关联的名称/值对。htmlm…

apt-get

apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。 apt-get update 在修改/etc/apt/sources.list或/etc/apt/preferences之後运行该命令。此外您需要定期运行这一命令以确保…

Leaflet中添加的不同图层样式图标

如上图,具体问题请查看对应html页引用的basemaps的css样式。 如下图是本项目引用的css样式: .basemap img { width: 48px; border: 2px solid #FFF; margin: 0 2px; /*border-radius: 40px;*/ box-shadow: 0 1px 5px rgba(0,0,0,0.65)} 当css样式中的bor…

ARM(IMX6U)BSP工程文件管理(分文件编程)

参考:Linux之ARM(IMX6U)BSP工程管理实验 作者:一只青木呀 发布时间: 2020-08-15 23:41:37 网址:https://blog.csdn.net/weixin_45309916/article/details/108028093 目录1、工程管理简介1.1、创建bsp、imx6…

ubuntu16.04 安装 ipython

sudo apt-get install ipython3转载于:https://www.cnblogs.com/kanneiren/p/9970127.html

php图片视频,PHP中使用php5-ffmpeg撷取视频图片实例

前几天在玩 FFmpeg 的时后,突然发现 Ubuntu 上多了 php5-ffmpeg 这个扩充套件,就想来玩玩看,看好不好用,有两个结论:读取影片取决于 FFmpeg 的支援性,如果想要什么格式都支援的话,建议自己重新编…

static 与 extern 关键字描述说明

使用static 定义的变量和函数只能用于本模块即为本文件 使用extern 定义的变量和函数可以用于其他模块的引用转载于:https://www.cnblogs.com/heidsoft/p/3420574.html

ARM(IMX6U)裸机C语言蜂鸣器驱动实验(BSP+SDK)

参考:Linux之ARM(IMX6U)裸机C语言蜂鸣器驱动实验–驱动编写,编译 作者:一只青木呀 发布时间: 2020-08-16 14:47:23 网址:https://blog.csdn.net/weixin_45309916/article/details/108032168 目录1、有源蜂鸣…

《深入浅出nodejs》读书笔记(3)

挖坑,待填 转载于:https://www.cnblogs.com/yangzhou33/p/9972378.html

java金字塔的流程图,R中的金字塔图

Plotrix可能更容易,但可以反汇编ggplot图表,并将它们排列为金字塔图 . 使用 eipi10的数据(谢谢),并调整drawing-pyramid-plot-using-r-and-ggplot2中的代码,我为"males","females"和"country…

常用AT指令集 (转)

常 用 AT 命 令 手 册1、常用操作 1.1 AT 命令解释&#xff1a;检测 Module 与串口是否连通&#xff0c;能否接收 AT 命令&#xff1b; 命令格式&#xff1a;AT<CR> 命令返回&#xff1a;OK (与串口通信正常)&#xff08;无返回&#xff0c;与串口通信未连通&#xff09;…

ARM(IMX6U)裸机按键输入实验(BSP+SDK、GPIO输入与输出、按键消抖)

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机按键输入实验&#xff08;GPIO的输出与输入&#xff09; 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-17 21:43:37 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108057…

php 提取正文算法,PHP生成文章摘要算法_栈

之前网上复制了一个摘要算法&#xff0c;一直使用正常。最近写的一篇前500字里含有超链接&#xff0c;就导致摘要生成有误&#xff0c;从而影响了前端样式。所以后面打算自己写&#xff0c;想起大学编译原理匹配表达式的大致思想&#xff0c;就决定采用栈的思想试试。实现目标&…

设计模式 之 《组合模式》

GOOD&#xff1a;整体和部分可以被一致对待&#xff08;如WORD中复制一个文字、一段文字、一篇文章都是一样的操作&#xff09; #ifndef __COMPOSITE_MODEL__ #define __COMPOSITE_MODEL__ #include <iostream> #include <string> #include <vector> using n…

ARM(IMX6U)裸机主频和时钟

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机主频和时钟配置 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-28 10:39:17 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108237599 目录1、I.MX6U 时钟系统详解系统时钟…

POJ2318 TOYS

嘟嘟嘟 题面&#xff1a;先告诉你一个矩形抽屉的坐标&#xff0c;然后\(n\)个隔板将抽屉分成了\(n 1\)格&#xff08;格子从\(0\)到\(n - 1\)标号&#xff09;&#xff0c;接下来随机输入\(m\)个玩具的坐标。问最后每一个格子里有多少个玩具。 仔细想想就是一道计算几何入门题…

关联矩阵古林法的matlab代码,[转载][原创]灰色关联分析及Matlab程序实现

灰色系统理论由我国著名学者邓聚龙教授于1982提出。灰色关联分析是灰色系统理论的一个分支&#xff0c;应用灰色关联分析方法对受多种因素影响的事物和现象从整体观念出发进行综合评价是一个被广为接受的方法。一、灰色关联分析法的建模过程灰色关联分析法的基本思想是根据各比…