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(
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