mysql之聚合函數、group by、having

sql中提供聚合函數能夠用來統計,求和,求最值等sql

那麼聚合函數有哪些呢?函數

COUNT    統計行數量spa

SUM         求某一列的和blog

AVG          求某一列的平均值排序

MAX    求某一列的最大值class

MIN     求某一列的最小值im

下面給出一些具體的用法d3

首先建立數據表以下:統計

執行列、行計數(count):數據

COUNT  標準格式:

SELECT COUNT(<計數規範>)  FROM 表名;

其中,計數規範包括

-* : 計算全部選擇的的行,包括NULL的值

- ALL列名 : 計數全部指定列的非空值,若是不寫,就默認爲ALL

- DISTINCT 列名 : 計數指定的列的惟一非空值

 例如,計算班裏有多少學生:

這樣就出錯了,會把null值也算進來,能夠這樣來計算:

也能夠加入條件篩選,例如計算女生的人數

也能夠計算班級數目,須要用到DISTINCT:

DISTINCT 即去重,若是不加DISTINCT返回的結果會是4

 返回列合計值(SUM):

注:SUM 只有 ALL 和 DISTINST 倆種計數規範, 並無*

計算學生的年齡之和:

返回列的平均值(AVG):

計算學生年齡的平均值

返回最大值/最小值(MAX/MIN):    

求年齡最大的學生(最小年齡同理)

 

 

注:這裏只能求最大值,不能查詢學生的具體信息,須要用到子查詢

數據分組  (GROUP BY )

SQL數據能夠按照列名分組,配合聚合函數十分實用

好比咱們想知道每一個班裏有幾個學生,咱們可使用 GTOUP BY 配合  COUNT 使用:

 注意:由於聚合函數經過做用於一組數據而只返回一個單個值,所以,在SELECT語句中出現的元素要麼爲一個聚合函數的輸入值,要麼爲GROUP BY語句的參數,不然會出錯。

HAVING 過濾條件

HAVING語句一般與GROUP BY語句聯合使用,用來過濾由GROUP BY語句返回的記錄集。HAVING語句的存在彌補了WHERE關鍵字不能與聚合函數聯合使用的不足。
 
再說HAVING以前先要講一下sql的執行順序:
第一步: 執行FROM 
第二步: 執行WHERE過濾條件
第三步: 執行GROUP BY 分組
第四步: 執行SELECT投影
第五步: 執行HAVING過濾條件
第六步: 執行ORDER BY排序
例,咱們想查詢平均年齡在20歲以上的班級
能用下面的語句嗎?
SELECT student_class, AVG(student_age) FROM t_student WHERE AVG(student_age)>20 GROUP BY student_class;
結果會出錯。正由於聚合函數在WHERE以後執行,因此這裏在WHERE判斷條件里加入聚合函數是作不到的。
這裏使用HAIVING便可完成:
相關文章
相關標籤/搜索