一,首先想到: 1,關鍵字distinct 2,group by 3,MAX,MIN這樣的函數被稱為聚集函數,和GROUP搭配起來用 但均無法實現,執行結果如下 舉例: 表名:OffsiteOutreachTeam_List 欄位:CORPADDLEVEL(獲取該欄位不重覆數據),CHANNELCO ...
一,首先想到:
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;