• 技术文章 >数据库 >PostgreSQL

    postgresql表如何去重

    yangyang2020-04-08 13:35:42原创4879

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

    一、创建测试表

    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

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

    |     3

    |     2

    (2 rows)

     

    david=#

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

    四、查询要保留的数据

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    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=#

    五、删除重复数据

    1

    2

    3

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

    DELETE 3

    david=#

    六、查看最后结果

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    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
    上一篇:为什么使用postgresql 下一篇:postgresql使用索引吗

    相关文章推荐

    • postgresql初始化失败• postgresql如何查看(point类型变量)坐标系• postgresql日志放在哪里

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网