SQL去重的3種實用方法總結(jié)
SQL去重的三種方法匯總?
這里的去重是指:查詢的時候, 不顯示重復,并不是刪除表中的重復項
1.distinct去重
注意的點:distinct
只能一列去重,當distinct后跟大于1個參數(shù)時,他們之間的關(guān)系是&&(邏輯與)關(guān)系,只有全部條件相同才會去重
弊端:當查詢的字段比較多時,distinct會作用多個字段,導致去重條件增多
select distinct UserResult from Table1
2.group by去重
去重原理:將重復的行進行分組,相同的數(shù)據(jù)只顯示第一行
弊端:使用group by后,所有查詢字段都需要使用聚合函數(shù),比較繁瑣
select min(UserName)UserName,min(UserSex)UserSex,min(UserSubject)UserSubject,min(UserResult)UserResult from Table1 group by UserResult
3.row_number() over (parttion by 分組列 order by 排序列)
弊端:小孟還不知道
去重原理:現(xiàn)根據(jù)重復列進行分組,分組后再進行排序,不同的組序號為1,相同的組序號為2,排除為2的就達到了去重效果
select *from ( --查詢出重復行 select *,row_number() over (partition by UserResult order by UserResult desc)num from Table1 )A where A.num=1
這里安利第三個,row_number(),穩(wěn)一些!
補充:SQL根據(jù)某列或幾列分組去重——row_number() over(partition by)的用法
有時利用SQL進行數(shù)據(jù)處理會發(fā)現(xiàn),要根據(jù)某列或某幾列選取信息,由于其他列不同而出現(xiàn)了多次,如運行程序1的結(jié)果圖1:
程序1:
--程序1:要解決的問題 select a.* from AShareEarningEst a where a.S_INFO_WINDCODE in ('000650.SZ') and a.REPORTING_PERIOD = 20181231 order by a.RESEARCH_INST_NAME,a.EST_DT
我們看到,在AShareEarningEst(中國A股盈利預測明細)表中,共有12人次的證券公司研究員,對000650.SZ(仁和藥業(yè))公司的20181231報告期進行預測。例:華泰證券的楊燁輝在20160420、20160428和20160622分別對000650.SZ(仁和藥業(yè))發(fā)布研究報告進行了預測?,F(xiàn)在,我們只需要同一家證券公司的同一個研究員(此處假定同一家證券公司的研究員姓名相同時,即為同一個研究員)做出的最新預測數(shù)據(jù),即根據(jù)證券公司名稱、研究員姓名,同時根據(jù)估計日期進行篩選。
此時,可根據(jù)row_number() over(partition by)進行處理,運行程序2結(jié)果如圖2:
程序2:
--程序2:最終解決問題的程序 select b.* from (select row_number() over(partition by a.RESEARCH_INST_NAME, a.ANALYST_NAME order by est_dt desc) as rn, --根據(jù)RESEARCH_INST_NAME(證券公司名稱)和ANALYST_NAME(研究員名字)進行分類, --同時根據(jù)est_dt(估計日期)倒序排序,即最新日期排在同一分類的上方,此時構(gòu)建出rn為 a.* from wdzx.AShareEarningEst a where a.S_INFO_WINDCODE in ('000650.SZ') --, '000951.SZ', '600006.SH', '600166.SH') and a.REPORTING_PERIOD = 20181231) b --將分類后的程序構(gòu)成表b??梢韵冗\行b的程序觀察結(jié)果 where b.rn = 1--運用表b的結(jié)果進行子查詢,rn=1即為所需結(jié)果
此時,即主要利用了row_number() over(partition by)函數(shù)篩選出了去重后的結(jié)果。
總結(jié)
到此這篇關(guān)于SQL去重的3種實用方法的文章就介紹到這了,更多相關(guān)SQL去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux 安裝JDK Tomcat MySQL的教程(使用Mac遠程訪問)
這篇文章主要介紹了Linux 安裝JDK Tomcat MySQL(使用Mac遠程訪問),本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06詳解記錄MySQL中l(wèi)ower_case_table_names的坑
這篇文章主要介紹了詳解記錄MySQL中l(wèi)ower_case_table_names的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03MySQL5綠色版windows下安裝總結(jié)(推薦)
這篇文章主要介紹了MySQL5綠色版windows下安裝總結(jié),需要的朋友可以參考下2017-03-03