oracle過濾某個字段重復記錄,只獲取一條記錄


一,首先想到:

1,關鍵字distinct

2,group by

3,MAX,MIN這樣的函數被稱為聚集函數,和GROUP搭配起來用

但均無法實現,執行結果如下

舉例:

表名:OffsiteOutreachTeam_List

字段:CORPADDLEVEL(獲取該字段不重復數據),CHANNELCODE, CORPNAME, BELONGORGNAME

執行結果:

1,distinct

--一個字段有效,多個字段無效

select distinct CORPADDLEVEL from OffsiteOutreachTeam_List;

select distinct CORPADDLEVEL ,CHANNELCODE, CORPNAME, BELONGORGNAME from OffsiteOutreachTeam_List;

注意:當除了過濾字段外的其他所有字段內容相同時,才可以起到過濾效果。

2,group by

--只能查詢一個字段

select CORPADDLEVEL from OffsiteOutreachTeam_List group by CORPADDLEVEL; --報錯 not a group by expression

select CORPADDLEVEL,CHANNELCODE, CORPNAME, BELONGORGNAME from OffsiteOutreachTeam_List group by CORPADDLEVEL;

3,MAX,MIN這樣的函數被稱為聚集函數,和GROUP搭配起來用

--只能過濾兩個字段

SELECT MIN(CHANNELCODE), CORPADDLEVEL FROM OffsiteOutreachTeam_List GROUP BY CORPADDLEVEL --報錯 not a group by expression

SELECT MIN(CHANNELCODE), CORPADDLEVEL,CORPNAME, BELONGORGNAME FROM OffsiteOutreachTeam_List GROUP BY CORPADDLEVEL

二,正確方式

1,關鍵字 row_number() OVER(PARTITION BY 使用子查詢對重復數據按照123...排序,再條件需要為1的。

select  CORPADDLEVEL ,CHANNELCODE, CORPNAME, BELONGORGNAME
from(select ol.CORPADDLEVEL,ol.CHANNELCODE, ol.CORPNAME, ol.BELONGORGNAME, row_number() OVER(PARTITION BY ol.CORPADDLEVEL ORDER BY ol.CORPADDLEVEL) ds
from OffsiteOutreachTeam_List ol
where ol.CORPADDLEVEL is not null)
where ds = 1

2,使用min group by進行子查詢,獲取唯一字段,再查詢所有字段。
select  CORPADDLEVEL ,CHANNELCODE, CORPNAME, BELONGORGNAME from OffsiteOutreachTeam_List where CHANNELCODE in
(select min(CHANNELCODE) from OffsiteOutreachTeam_List group by CORPADDLEVEL) order by CORPADDLEVEL;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM