資源描述:
《第07章_數據庫分組查詢及分組函數》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、第七章分組查詢及分組函數本章主要內容7.1前言需要分組的情況。7.2分組函數掌握概念與運用。7.3分組查詢掌握概念與運用。7.4總結目標通過本章學習了解組函數描述組函數的用途使用GROUPBY字句數據分組使用HAVING字句過濾分組結果集7.1前言用戶需要統(tǒng)計數據的結果的時候,多數會用到分組函數及分組查詢的方式。SUM:SUM([{DISTINCT
2、ALL}])求和SELECTSUM(score)FROMtbl_scoreinfoWHEREclassno='001'SELECTSUM(score),stun
3、oFROMtbl_scoreinfoWHEREclassno='001'AVGSELECTAVG(SCore)AS平均成績Fromtbl_scoreWHEREScore>=60代碼錯誤7.2分組函數DISTINCT:只對不同的求總和,相同只取一個ALL:表示對所有求總和MAX、MINSELECTAVG(score)AS平均成績,MAX(score)AS最高分,MIN(score)AS最低分Fromtbl_scoreinfoWHEREscore>=60COUNTSELECTCOUNT(*)AS及格人數From
4、tbl_scoreinfoWHEREscore>=60第一門課4個成績取平均值第二門課4個成績取平均值第三門課6個成績取平均值7.3分組查詢SELECTclassno,AVG(Score)AS課程平均成績FROMtbl_scoreinfoGROUPBYclassno按照省份分類,計算總數SELECTCOUNT(*)FROMTBL_CUSTOMERGROUPBYSTATE;如果在按省份分類的基礎上在加上按實例分類,計算總數分組查詢—多列分組SELECTCOUNT(*),STATE,CITYFROMTBL_CU
5、STOMERGROUPBYSTATE,CITY;SELECTcolumn,group_functionFROMtable[WHEREcondition][GROUPBYgroup_by_expression][HAVINGgroup_condition][ORDERBYcolumn];過濾分組:HAVING子句使用HAVING過濾分組:1.行已經被分組。2.使用了組函數。3.滿足HAVING子句中條件的分組將被顯示。分組查詢—HAVINGSELECTclassnoAS課程編號,AVG(score)AS測試平
6、均成績FROMtbl_scoreinfoGROUPBYclassnoHAVINGAVG(Score)>70;SELECTPUBID,SUM(COST)FROMTBL_BOOKSWHEREPUBID<>4GROUPBYPUBIDHAVINGSUM(COST)>40ORDERBYPUBID;SELECTPUBID,SUM(COST)FROMTBL_BOOKSWHERECATEGORYLIKE'%計%'GROUPBYPUBIDHAVINGSUM(COST)>40ORDERBYPUBID;HAVING子句分組查詢—
7、對比WHEREGROUPBYHAVINGWHERE子句從數據源中去掉不符合其搜索條件的數據GROUPBY子句搜集數據行到各個組中,統(tǒng)計函數為各個組計算統(tǒng)計值HAVING子句去掉不符合其組搜索條件的各組數據行SELECTAVG(NVL(score,0))FROMTBL_SCOREINFO;在組函數中使用NVL函數NVL函數使分組函數無法忽略空值。非法使用組函數所有包含于SELECT列表中,而未包含于組函數中的列都必須包含于GROUPBY子句中。SELECTCLASSNO,AVG(NVL(SCORE,0))FR
8、OMTBL_SCOREINFO代碼錯誤GROUPBY子句中缺少列非法使用組函數不能在WHERE子句中使用組函數??梢栽贖AVING子句中使用組函數。SELECTclassno,AVG(score)FROMtbl_scoreinfoWHEREAVG(score)>70GROUPclassno;代碼錯誤WHERE子句中不能使用組函數嵌套組函數顯示平均分數的最大值SELECTMAX(AVG(score))FROMtbl_scoreinfoGROUPBYclassno;代碼錯誤組函數不能嵌套使用7.4總結對于AVG
9、,SUM函數只用于數字字段。COUNT,MAX,MIN函數可用于任何數據類型。AVG,SUM,MAX,MIN函數全部忽略NULL值。COUNT(*)計算包含NULL值的記錄。除非使用NVL函數進行協(xié)助。GROUPBY子句用來對表數據進行分組。而且檢索子句包含一個單獨的字段名稱和一個組函數,字段名稱還必須包括在GROUPBY子句中。HAVING子句用來限制組函數中的組(與WHERE的功能類似)。