好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

postgresql 删除重复数据案例详解

1.建表

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

/*

  Navicat Premium Data Transfer

 

  Source Server         : localhost

  Source Server Type    : PostgreSQL

  Source Server Version : 110012

  Source Host           : localhost:5432

  Source Catalog        : postgres

  Source Schema          : public

 

  Target Server Type    : PostgreSQL

  Target Server Version : 110012

  File Encoding         : 65001

 

  Date : 30/07/2021 10:10:04

*/

 

 

-- ----------------------------

-- Table structure for test

-- ----------------------------

DROP TABLE IF EXISTS "public" . "test" ;

CREATE TABLE "public" . "test" (

   "id" int4 NOT NULL DEFAULT NULL ,

   "name" varchar (255) COLLATE "pg_catalog" . "default" DEFAULT NULL ,

   "age" int4 DEFAULT NULL

)

;

 

-- ----------------------------

-- Records of test

-- ----------------------------

INSERT INTO "public" . "test" VALUES (1, 'da' , 1);

INSERT INTO "public" . "test" VALUES (2, 'da' , 12);

INSERT INTO "public" . "test" VALUES (3, 'dd' , 80);

INSERT INTO "public" . "test" VALUES (4, 'dd' , 80);

INSERT INTO "public" . "test" VALUES (5, 'd1' , 13);

 

-- ----------------------------

-- Primary Key structure for table test

-- ----------------------------

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

输出.

name        count

da              2

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

2

3

4

5

6

7

8

SELECT

  1.

FROM

  test

WHERE

  id NOT IN (

  ( SELECT min ( id ) AS id FROM test GROUP BY name )

  )

5.删除数据

?

1

2

3

4

5

6

7

8

9

10

DELETE

FROM

  test

WHERE

  id NOT IN (

  SELECT

   t.id

  FROM

  ( SELECT max ( id ) AS id FROM test GROUP BY name ) t

  )

到此这篇关于postgresql 删除重复数据案例详解的文章就介绍到这了,更多相关postgresql 删除重复数据内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_43632687/article/details/119239104

查看更多关于postgresql 删除重复数据案例详解的详细内容...

  阅读:32次