请选择 进入手机版 | 继续访问电脑版

[PostgreSQL] postgresql 删除重复数据案例详解

[复制链接]
查看66 | 回复8 | 2021-9-14 02:37:30 | 显示全部楼层 |阅读模式

1.建表

  1. /*
  2. Navicat Premium Data Transfer
  3. Source Server : localhost
  4. Source Server Type : PostgreSQL
  5. Source Server Version : 110012
  6. Source Host : localhost:5432
  7. Source Catalog : postgres
  8. Source Schema : public
  9. Target Server Type : PostgreSQL
  10. Target Server Version : 110012
  11. File Encoding : 65001
  12. Date: 30/07/2021 10:10:04
  13. */
  14. -- ----------------------------
  15. -- Table structure for test
  16. -- ----------------------------
  17. DROP TABLE IF EXISTS "public"."test";
  18. CREATE TABLE "public"."test" (
  19. "id" int4 NOT NULL DEFAULT NULL,
  20. "name" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
  21. "age" int4 DEFAULT NULL
  22. )
  23. ;
  24. -- ----------------------------
  25. -- Records of test
  26. -- ----------------------------
  27. INSERT INTO "public"."test" VALUES (1, 'da', 1);
  28. INSERT INTO "public"."test" VALUES (2, 'da', 12);
  29. INSERT INTO "public"."test" VALUES (3, 'dd', 80);
  30. INSERT INTO "public"."test" VALUES (4, 'dd', 80);
  31. INSERT INTO "public"."test" VALUES (5, 'd1', 13);
  32. -- ----------------------------
  33. -- Primary Key structure for table test
  34. -- ----------------------------
  35. ALTER TABLE "public"."test" ADD CONSTRAINT "test_pkey" PRIMARY KEY ("id");
复制代码

2.根据名称获取重复

先看看哪些数据重复了

  1. select name ,count(1) from test group by name having count(1)>1
复制代码

输出.

  1. name        count
  2. da              2
  3. dd              2
复制代码

3.删除全部 重复数据

注意 把要更新的几列数据查询出来做为一个第三方表,然后筛选更新。

  1. delete from test where name in (select t.name from (select name ,count(1) from test group by name having count(1)>1) t)
复制代码

4.保留一行数据

这里展示我们必要 保留的数据:重复数据,保留ID最大那一条

  1. SELECT
  2. 1.
  3. FROM
  4. test
  5. WHERE
  6. id NOT IN (
  7. ( SELECT min( id ) AS id FROM test GROUP BY name )
  8. )
复制代码

5.删除数据

  1. DELETE
  2. FROM
  3. test
  4. WHERE
  5. id NOT IN (
  6. SELECT
  7. t.id
  8. FROM
  9. ( SELECT max( id ) AS id FROM test GROUP BY name ) t
  10. )
复制代码

到此这篇关于postgresql 删除重复数据案例详解的文章就先容 到这了,更多相干 postgresql 删除重复数据内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的相干 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 0Zombies0 | 2021-9-18 08:16:29 | 显示全部楼层
勤奋灌水,天天向上!
回复

使用道具 举报

avatar 安静的小女子 | 2021-9-21 22:54:14 | 显示全部楼层
在哪里跌倒,就在那里多爬一会儿!
回复

使用道具 举报

avatar 制菜参力 | 2021-9-30 09:26:03 | 显示全部楼层
admin楼主是男的还是女的?
回复

使用道具 举报

avatar 宋长宁 | 2021-10-1 22:11:25 | 显示全部楼层
支持一下!
回复

使用道具 举报

avatar 亦池 | 2021-10-6 19:04:01 | 显示全部楼层
admin楼主的头像是本人吗?
回复

使用道具 举报

avatar 乱说家刳 | 2021-10-9 03:12:02 | 显示全部楼层
admin楼主,你妈妈喊你回家吃饭!
回复

使用道具 举报

强,我和我的小伙伴们都惊呆了!
回复

使用道具 举报

楼上是GG还是MM啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则