当前位置: 首页 > news >正文

Pgsql怎样找到表中某个字段值重复的记录并删除冗余记录,只保留一条

背景

今天发现某个黄页爬取的数据有部分重复了,原本我用的公司详情页的url进行md5来作为主键做upsert入,但后面在核验数据时发现有些详情url虽是同一间公司的,但路由上有细微差别导致写入了重复的公司数据,所以要想办法清理掉重复的公司;
除了有表id外,我的表里还有一个local_id字段,用于保存页面上的内部id,下面就从这个字段入手进行;

实现方案

第一步首先是看看有多少重复的记录,这个很简单,通过group by local_id就能找到了,如下:

SELECT"local_id" 
FROM"result".table_name
WHERE"sources" = 'xxxx' 
GROUP BY"local_id" 
HAVINGCOUNT ( "local_id" ) > 1 )

结果数量是91条,这就意味着有91个公司的信息有重复的;

然后我想看看总共有多少条对应的重复公司记录

SELECT*,ROW_NUMBER ( ) OVER ( PARTITION BY local_id ORDER BY "company_id" ) AS rn 
FROM(SELECT* FROM"result".table_name WHERE"sources" = 'xxxx' AND "local_id" IN ( SELECT "local_id" FROM "result".table_name WHERE "sources" = 'xxxx' GROUP BY "local_id" HAVING COUNT ( "local_id" ) > 1 ) ORDER BY"local_id" ) T) 

查询结果是是182条,也就意味着重复的公司记录里,每家公司信息都是重复了1条;

接着下来的问题是怎样实现把多余的删除,只保留一条的目的,这里用到的pgsql的分区功能,他会根据指定字段值给相同的值增加一个编号,以下是我这个场景的示例:

SELECT* 
FROM(SELECT*,ROW_NUMBER () OVER ( PARTITION BY local_id ORDER BY "company_id" ) AS rn FROM(SELECT* FROM"result".table_nameWHERE"sources" = 'xxxx' AND "local_id" IN ( SELECT "local_id" FROM "result".table_name WHERE "sources" = 'xxxx' GROUP BY "local_id" HAVING COUNT ( "local_id" ) > 1 ) ORDER BY"local_id" ) T ) t1 
WHERErn = 2;

通过这条sql,可以把每个local_id重复的记录找出来,删除后就能达到只保留一条记录的目的了,如果重复的记录不只一条,只要把最后的条件改成 >=2 就可以了。

如果本文解决了你的问题,请点赞精神支持一下,这能鼓励我继续做更多的分享,谢谢

http://www.lryc.cn/news/335521.html

相关文章:

  • 如何在HarmonyOS(鸿蒙操作系统)上进行应用开发
  • C++ typeid运算符介绍
  • Android适配平板屏幕尺寸
  • 汽车充电桩主板在出厂前需要做哪些检测?
  • 关于Renesas R7 的选项字节开关看门狗
  • redis bigKey问题
  • 二手车商的套路
  • c++ 根据ip主机号和子网掩码随机生成ip
  • 事务的隔离级别
  • 性能优化角度
  • Vue3 使用ElementUI 显示异常
  • 从0开始复习python~
  • 从零开始搭建后端信息管理系统(新手小白比如)
  • CentOS 7详细介绍。
  • JavaScript:nodeType节点/文档碎片对象模型-DcoumentFragment
  • JDK安全剖析之安全处理入门
  • 探索RAG:加强问答能力的新技术
  • 赛氪网|2024中国翻译协会年会“AI科技时代竞赛与就业”分论坛
  • 【Jmeter+Influxdb+Grafana性能监控平台安装与部署】
  • [挖坟]如何安装Shizuku和LSPatch并安装模块(不需要Root,非Magisk)
  • rhce复习3
  • CentOS 7 升级 5.4 内核
  • photoshop2022增效工具ICOFormat.8bi(PS ico插件)
  • LeetCode-146. LRU 缓存【设计 哈希表 链表 双向链表】
  • 如何在Python中import其他文件的实时值
  • NumPy进阶(二)
  • 计算机专业,不擅长打代码,考研该怎么选择?
  • SQL Server的详细使用教程
  • 挑错罐头=“害猫”!猫咪主食罐到底应该怎么选?
  • 43---SATA电路设计