SQL 中的聚集函數?
SQL 函數包含了算術函數,字符串函數,日期函數,轉換函數。還有一函數,叫做聚集函數。SQL 聚集函數是對一組數據進行彙總的函數,輸入是一組數據的集合,輸出是單個值。
有哪些聚集函數
SQL 中的聚集函數,有最大值,最小值,平均值。
Count 使用
例子:查詢heros 中hp_max 大於6000 的英雄。
SELECT COUNT(*) FROM heros WHERE hp_max > 6000
運⾏結果爲41。想要查詢最⼤⽣命值⼤於6000,且有次要定位的英雄數量,需要使⽤COUNT函數。
SELECT COUNT(role_assist) FROM heros WHERE hp_max > 6000
運⾏結果是23。需要說明的是,COUNT(role_assist)會忽略值爲NULL的數據⾏,⽽COUNT(*)只是統計數據⾏數,不管某個字段是否爲NULL。
對數據行中不同的取值進行聚集,過濾掉重複,可以寫成如下:
SELECT COUNT(DISTINCT hp_max) FROM heros
運⾏結果爲61。
MAX 使用
使用 Max 求hp_max最大值。
SELECT MAX(hp_max) FROM heros WHERE role_main = '射⼿' or role_assist = '射⼿'
運⾏結果爲6014。
COUNT,AVG、MAX、MIN和SUM函數使用
SELECT COUNT(*), AVG(hp_max), MAX(mp_max), MIN(attack_max), SUM(defense_max) FROM heros role_main = '射⼿' or role_assist = '射⼿'。
運行結果:
AVG 、MAX、 MIN 會自動忽略值爲 NULL 的數據行。
AVG
有時候需要對 AVG 保留有效數字, 比如保存兩位有效數字。
SELECT ROUND(AVG(DISTINCT hp_max), 2) FROM heros
運⾏結果爲6653.84。
數據分組統計
數據分組,一般要使用 Group By 語句。
SELECT COUNT(*), role_main FROM heros GROUP BY role_main
運行結果:
SELECT COUNT(*), role_assist FROM heros GROUP BY role_assist
如果還需要按照需要對分組進行排序,可以寫成如下:
SELECT COUNT(*) as num, role_main, role_assist FROM heros GROUP BY role_main, role_assist ORDER BY num DESC
運行結果:
HAVING 與 WHERE 的區別是什麼?
HAVING 和 WHERE 一樣可以進行鍋爐,只是 WHERE 作用於數據行, HAVING 作用於分組。
SELECT COUNT(*) as num, role_main, role_assist FROM heros GROUP BY role_main, role_assist HAVING num > 5
運行結果: