1. 程式人生 > >Postgresql去除重複資料的方法

Postgresql去除重複資料的方法

PostgreSQL刪除重複資料

去重的方法一般是找到重複資料中的一條,以某一唯一條件去掉其他重複值。

Oracle 去重的方法很多,常用的是根據 rowid 進行去重。

PostgreSQL 庫如何去除單表重複資料呢?可以通過 ctid 進行,下面是實驗過程。

一、建立測試表

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
—-+——-
1 | 3
2 | 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=#
複製程式碼
說明:如果表中已經有標明唯一的序列主鍵值,可以把該值替換上述的ctid直接刪除。

七、其他方法

也可以使用以下SQL刪除重複資料。

複製程式碼
david=# delete from emp a
david-# where a.ctid <>
david-# (
david(# select min(b.ctid) from emp b
david(# where a.id = b.id
david(# );
DELETE 3
david=#
複製程式碼
實際情況往往千變萬化,我們可能需要加where條件來進行判斷,防止刪除多的資料,比如我要刪除訂單號為169769的重複資料,那麼我的SQL需要這樣寫
delete from esale_zencart_saleorder_line where order_id=’169769’ and ctid not in ( select min(ctid) from esale_zencart_salorder_line where order_id=’169739’ group by model)
說明:在表資料量較大的情況下,這種刪除方法效率很高
原文地址:http://www.cnblogs.com/mchina/archive/2013/04/15/3022086.html

相關推薦

【轉】Postgresql去除重複資料方法

PostgreSQL刪除重複資料 去重的方法一般是找到重複資料中的一條,以某一唯一條件去掉其他重複值。 Oracle 去重的方法很多,常用的是根據 rowid 進行去重。 PostgreSQL 庫如何去除單表重複資料呢?可以通過 ctid 進行,下面是實驗

Postgresql去除重複資料方法

PostgreSQL刪除重複資料 去重的方法一般是找到重複資料中的一條,以某一唯一條件去掉其他重複值。 Oracle 去重的方法很多,常用的是根據 rowid 進行去重。 PostgreSQL 庫如何去除單表重複資料呢?可以通過 ctid 進行,下面是實驗過程。 一、建立測試表 david=# create

List集合去除重複資料 Java中List集合去除重複資料方法

【轉自】Java中List集合去除重複資料的方法 1. 迴圈list中的所有元素然後刪除重複 public static List removeDuplicate(List list) { for ( int

Java實現陣列去除重複資料方法詳解

一.用List集合實現 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer>(); for (int i=0; i<str.length; i++) { if(

oracle去除重複資料常用的方法

建立測試資料 create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10)); insert into nayi224_180824 select 1, 2, 3 fro

Java實現陣列去除重複資料方法詳解(轉)

本文例項講述了Java實現陣列去除重複資料的方法。分享給大家供大家參考,具體如下: 前一段時間被面試問到:如果一個數組中有重複元素,用什麼方法可以去重?一時間會想到用一種方法,但是後來查閱資料後發現,有好多方法可以實現,現在就總結一下,比較簡單的幾種。 一.用List

Java中List集合去除重複資料方法

1. 迴圈list中的所有元素然後刪除重複 public   static   List  removeDuplicate(List list)  {          for  ( int  i  =   0 ; i  <  list.size()  -   1 ;

List 如何去除重複資料 三個方法操作原理

原理:1.      把List集合中所有元素放到Set集合(Set集合不允許重複,重複會進行校驗),然後再把Set放回List集中中 此方法不能保證元素順序解決辦法: 使用ArrayList 建立二重迴圈 ArrayList獲取原有List集合使用ArrayList第一層迴

Java實現陣列去除重複資料方法

方法一:用List集合實現 package com.suanfa; import java.util.ArrayList; public class qqq { public static v

pandas dataframe去除重複資料pandas.DataFrame.drop_duplicates

例子: df2 = pd.DataFrame({'工參中沒有的cgi': self.mismatchedcgis}) # subset='工參中沒有的cgi' 表示只考慮列名為:工參中沒有的cgi 這一列的重複項,不設則需考慮全部列,也可以設成多列

JSON去除重複資料

var arr = [{ uuid: '1', name: '張三' }, { uuid: '2', name: '李四' }, { uuid: '3', name: '王五' }, { uuid: '2', name: '李四' }, { uuid: '1', name: '張三' }, {

jQuery 去除重複資料

    工作中肯定會碰見從介面中獲取到的多條資料一樣,如果在後臺可以處理,儘量在後臺處理掉,避免前臺處理重複資料(使用者是可以修改你的js檔案的),下面說的是從介面中直接獲取到的資料(當然了,這也不是我們自己提供的介面),一下是我個人的程式碼操作,一個菜鳥的理解: 1.首

NSArray 如何去除重複資料

方法一:  利用 NSSet 不會新增重複元素的特性,方法如下: NSSet *set = [NSSet setWithArray:myArray];      然後利用 [set allObjects] 獲取所有的元素。 這種方法最方便,但是有個缺點,就是獲得的結果

Js 陣列去除重複資料演算法

在JS中經常會遇到去除陣列中重複資料的需求,在此介紹四種演算法以實現JS陣列去重的功能. 1.速度最快演算法:物件鍵值對法     實現思路:          新建一js物件以及新陣列,遍歷傳入陣列時,判斷值是否為js物件的鍵,不是的話給物件新增該鍵並放入新陣

JAVA爬蟲爬取網頁資料資料庫中,並且去除重複資料

pom檔案 <!-- 新增Httpclient支援 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&

mysql查詢表裡的重複資料方法

    INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11')   delete from hk_test where username=

mybatis中resultMap丟失查詢結果,association“錯誤”去除重複資料的問題

  <resultMap id="commissionRec" type="CommissionRec" >         <result property="sourceName" column="cmr_sourceName"/>        

mysql儲存過程去除重複資料

CREATE DEFINER=`root`@`%` PROCEDURE `del_incoming_pointer`() BEGIN   /* 定義變數一 */      DECLARE paramId int;      DECLARE paramCode VARCHAR

robo 3t mongodb 去除重複資料的簡單語句

最近在用mongodb錄分鐘線,出現了很多重複資料和垃圾資料。如下。 使用以下語句查詢重複資料,我這個簡單隻需要時間重複就可以了。 db.getCollection('btc_usd_quarter_10').aggregate([{$group:{_id:{datetime:'$dat

mysql根據某一欄位去除重複資料

SQL如下: DELETE  FROM     aa  WHERE     shopid NOT IN ( SELECT     temp.min_id  FROM