一,首先想到: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;