postgresql表如何去重

去重的方法一般是找到重复数据中的一条,以某一唯一条件去掉其他重复值。PostgreSQL 库如何去除单表重复数据呢?可以通过 ctid 进行,下面我们就来看一下PostgreSQL去重的方法。

一、创建测试表

david=# create table emp (

david(# id int,

david(# name varchar);

CREATE TABLE

david=#

二、插入测试数据

david=# insert into emp values (1, 'david');

INSERT 0 1

david=# insert into emp values (1, 'david');

INSERT 0 1

david=# insert into emp values (1, 'david');

INSERT 0 1

david=# insert into emp values (2, 'sandy');

INSERT 0 1

david=# insert into emp values (2, 'sandy');

INSERT 0 1

david=# insert into emp values (3, 'renee'); 

INSERT 0 1

david=# insert into emp values (4, 'jack');  

INSERT 0 1

david=# insert into emp values (5, 'rose'); 

INSERT 0 1

david=#

三、查询初始化数据

david=# select ctid, * from emp;

 ctid  | id | name  

-------+----+-------

 (0,1) |  1 | david

 (0,2) |  1 | david

 (0,3) |  1 | david

 (0,4) |  2 | sandy

 (0,5) |  2 | sandy

 (0,6) |  3 | renee

 (0,7) |  4 | jack

 (0,8) |  5 | rose

(8 rows)

david=#

查询重复数据数

david=# select distinct id, count(*) from emp group by id having count(*) > 1;

 id | count 

----+-------

|     3

|     2

(2 rows)

david=#

查询出 id 为1的记录有3条,id 为2的记录有2条。

四、查询要保留的数据

以 min(ctid) 或 max(ctid) 为准。

david=# select ctid, * from emp where ctid in (select min(ctid) from emp group by id);

 ctid  | id | name  

-------+----+-------

 (0,1) |  1 | david

 (0,4) |  2 | sandy

 (0,6) |  3 | renee

 (0,7) |  4 | jack

 (0,8) |  5 | rose

(5 rows)

david=#

五、删除重复数据

david=# delete from emp where ctid not in (select min(ctid) from emp group by id);

DELETE 3

david=#

六、查看最后结果

david=# select ctid, * from emp;

 ctid  | id | name  

-------+----+-------

 (0,1) |  1 | david

 (0,4) |  2 | sandy

 (0,6) |  3 | renee

 (0,7) |  4 | jack

 (0,8) |  5 | rose

(5 rows)

david=#

推荐:PostgreSQL教程

以上是 postgresql表如何去重 的全部内容, 来源链接: utcz.com/z/539073.html

回到顶部