PostgreSQL去重的方法有哪些

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

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括魚(yú)臺(tái)網(wǎng)站建設(shè)、魚(yú)臺(tái)網(wǎng)站制作、魚(yú)臺(tái)網(wǎng)頁(yè)制作以及魚(yú)臺(tái)網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,魚(yú)臺(tái)網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到魚(yú)臺(tái)省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

PostgreSQL怎么去重

方法一:

通過(guò)group by分組,然后將分組后的數(shù)據(jù)寫入臨時(shí)表然后再寫入另外的表,對(duì)于沒(méi)有出現(xiàn)再group by后面的field可以用函數(shù)max,min提取,效率較高

推薦:PostgreSQL教程

--適合情況:這種情況適合重復(fù)率非常高的情況,一般來(lái)說(shuō)重復(fù)率超過(guò)5成則可以考慮用這個(gè)方法

--優(yōu)點(diǎn):對(duì)于重復(fù)率高的數(shù)據(jù)集的去重,十分推薦用這種方法

--缺點(diǎn):uuid不能用max或min提取,如果需要去重的數(shù)據(jù)集中包含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;

 方法二:

通過(guò)union去除完全重復(fù)的行,效率較高

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

select * from table1
union
select * from table1;

方法三:

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

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

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

方法四:

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

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

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

方法五:

使用窗口函數(shù)加id,即可以使用窗口函數(shù)將數(shù)據(jù)分組,并將每個(gè)分組按行排號(hào),并將行號(hào)與id(唯一id)存入一個(gè)集合里,這樣就可以根據(jù)這個(gè)集合來(lái)取處重復(fù)行的id,即通過(guò)行號(hào)>1,

-- 然后根據(jù)id刪除重復(fù)行,效率很高(100萬(wàn)數(shù)據(jù),重復(fù)9萬(wàn),時(shí)間: 14.596s)

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

--row_number() 為返回的記錄定義個(gè)行編號(hào)

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

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

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去重的方法有哪些的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站名稱:PostgreSQL去重的方法有哪些
URL鏈接:http://muchs.cn/article42/iidehc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)服務(wù)器托管虛擬主機(jī)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司