合 PostgreSQL删除重复数据的几种方法
Oracle 去重的方法很多,常用的是根据 rowid 进行去重,PostgreSQL 如何去除单表重复数据呢?可以通过 ctid 进行,下面是实验过程。
一般方法示例
一、创建测试表
1 2 3 4 5 | david=# create table emp ( david(# id int, david(# name varchar); CREATE TABLE david=# |
二、插入测试数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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=# |
三、查询初始化数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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=# |
查询重复数据数:
1 2 3 4 5 6 7 8 | david=# select distinct id, count(*) from emp group by id having count(*) > 1; id | count ----+------- 1 | 3 2 | 2 (2 rows) david=# |
查询出 id 为1的记录有3条,id 为2的记录有2条。