亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostgreSQL去重的方法有哪些

發布時間:2020-07-16 14:29:08 來源:億速云 閱讀:328 作者:清晨 欄目:編程語言

小編給大家分享一下PostgreSQL去重的方法有哪些,相信大部分人都還不怎么了解,因此分享這邊文章給大家學習,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學習方法吧!

PostgreSQL怎么去重

方法一:

通過group by分組,然后將分組后的數據寫入臨時表然后再寫入另外的表,對于沒有出現再group by后面的field可以用函數max,min提取,效率較高

推薦:PostgreSQL教程

--適合情況:這種情況適合重復率非常高的情況,一般來說重復率超過5成則可以考慮用這個方法

--優點:對于重復率高的數據集的去重,十分推薦用這種方法

--缺點:uuid不能用max或min提取,如果需要去重的數據集中包含uuid則十分尷尬

create temp table tmp_data1 as
select [field1],[field2]...,max(field_special),min(field_special) from group by [field1],[field2]...;
insert into [table] select * from tmp_data1;

 方法二:

通過union去除完全重復的行,效率較高

--適合情況:這種方法只適合去除完全重復的行

select * from table1
union
select * from table1;

方法三:

通過group by加id加not in,即先用group by分組,然后取出該分組下最大或最小的id組成集合,然后配合not in過濾掉重復的數據,效率很低,可以嘗試配合臨時表(測試發現依舊很慢)

--適合情況:由于該種方法效率很低,所以不推薦使用,如果數據量不大的情況下可以用這種方法,數據量只要上了100萬就會很慢很慢

delete from [table] where id not in (select max(id) from table1 group by [field1],[field2]...);

方法四:

通過group by加having加in,即先用group by分組,然后用having count(*)>1取出分組數量大于1的行(即重復的行),然后用in刪除重復行,效率較高

--適合情況:一條數據大概只有一到兩三條重復,這種方法一次只能刪除重復數據的一條,如果有些數據有幾百次重復那就會累死,其實也可以使用函數做一個循環,但這樣的效率就不高了

delete from [table] where id in (select max(id) from [table] group by [field1],[field2]... having count(*)>1);

方法五:

使用窗口函數加id,即可以使用窗口函數將數據分組,并將每個分組按行排號,并將行號與id(唯一id)存入一個集合里,這樣就可以根據這個集合來取處重復行的id,即通過行號>1,

-- 然后根據id刪除重復行,效率很高(100萬數據,重復9萬,時間: 14.596s)

--適合情況:該種方法效率很高,特別推薦使用,但需要了解窗口函數以及其中的一些關鍵詞的意義

--row_number() 為返回的記錄定義個行編號

--over 與row_number()函數配套使用

--partition by [field1],[field2]... 根據指定的字段分組

delete from [table] where id in (select id from (select row_number() over (partition by [field1],[field2]...), id from [table]) as t where t.row_number>1);

以上是PostgreSQL去重的方法有哪些的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亳州市| 景洪市| 墨竹工卡县| 武陟县| 凤凰县| 河池市| 获嘉县| 双鸭山市| 望奎县| 正阳县| 神池县| 刚察县| 天长市| 旬阳县| 双城市| 桃江县| 历史| 敖汉旗| 金华市| 西和县| 五常市| 清丰县| 南康市| 邵东县| 清水县| 贞丰县| 岚皋县| 简阳市| 永平县| 双牌县| 卢湾区| 浦东新区| 汉沽区| 辽宁省| 甘德县| 沂水县| 抚顺县| 惠来县| 南京市| 确山县| 隆子县|