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

一,首先想到:express

1,關鍵字distinct函數

2,group byspa

3,MAX,MIN這樣的函數被稱爲彙集函數,和GROUP搭配起來用排序

但均沒法實現,執行結果以下it

舉例:io

表名:OffsiteOutreachTeam_Listclass

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

執行結果:select

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;

相關文章
相關標籤/搜索