1、有些時候需要數據的匯總值,而不是數據本身,比如對某些數據求和、計數、求最大最小值、求平均值,因此就有了5個聚集函數:AVE()、COUNT()、MAX()、MIN()、SUM():
(1)求平均值:AVE(),一個AVG()只對一個字段有效,注意AVE()忽略NULL值,而不是將其作為“0”參與計算:
SELECT AVG(字段名1),```,AVG(字段名n) FROM 表名 WHERE 字句;
(2)計數:COUNT(),兩種用法:COUNT(*):對表中行數進行計數,不管是否有NULL;COUNT(字段名):對特定列有數據的行進行計數,忽略NULL值
(3)求最大、最小值:MAX()、MIN():多用於數值和日期,文本也可以用,升序排列的最大或最小值。都忽略NULL
(4)求和:SUM():可以對單個列求和,也可以對多個列乘積求和:
(5)ALL與DISTINCT:可用於以上5個函數,默認是ALL,對非重復值計算是DISTINCT,用在函數的參數中,與字段名用空格隔開
(6)聚集函數的組合:以上幾個函數可以包含在SELECT語句中,比如求Products中的商品總數、平均價格、最高價格、最低價格
2、將數據在邏輯上進行分組:比如求各個供應商的商品總數、平均價格、最高價格、最低價格
(1)GROUP BY的使用規定:
1.GROUP BY 語句必須出現在WHERE之後,ORDER BY 之前
2.分組列中若有NULL,這也將作為一組
3.除聚集計算語句外,SELECT中的選擇列必須出現在GROUP BY 中
4.GROUP BY 的列必須是檢索列或者表達式,若是在SELECT中使用的表達式,在GROUP BY 中也要使用相同的表達式,還不能用別名
5.GROUP BY 可以包含任意數目的列,可以嵌套
3、將分組進行過濾:HAVING,與GROUP BY 配合使用,與WHERE類似,只是WHERE針對行,HAVING針對邏輯分組,比如列出有2個及以上產品,並且其價格大於等於4的供應商:
WHERE過濾掉的行不參與GROUP BY的分組
4、分組(GROUP BY)與排序(ORDER BY):GROUP BY輸出的數據不一定有順序;ORDER BY 可以使用任意列(包括非選擇列),但GROUP BY只能且必須使用選擇列火表達式列;ORDER BY 可以沒有,但GROUP BY 在有選擇列(或表達式列)與聚集函數一起時,必須使用。
5、SELECT、FROM、WHERE、GROUP BY、HAVIN、GORDER BY順序