您好,登錄后才能下訂單哦!
小編給大家分享一下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表去重的方法有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。