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);
推荐学习《Python教程》。
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!