【1】聚合函數返回NULLhtml
當where條件不知足時,聚合函數sum()、avg()的返回值爲NULL。sql
(1)源數據表函數
(2)以下SQL語句spa
SELECT sClass, COUNT(*) AS total, AVG(sChina) AS avg_china, AVG(sMath) AS avg_math, AVG(sEnglish) AS avg_english FROM grades WHERE sClass = '080601'
(3)實際結果:code
舒適提醒:若是不想要這行NULL值的結果集,能夠參見隨筆《Mysql AVG() 值返回NULL而非空結果集》htm
【2】解決方案blog
由於某種須要,咱們實在不想出現NULL這個值,想用0表示,可怎麼處理呢?get
有三種方式:class
(1)以下SQL語句循環
SELECT sClass, COUNT(*) AS total, IFNULL(AVG(sMath), 0) AS avg_math, # 方式一 COALESCE(AVG(sEnglish), 0) AS avg_english, # 方式二 CASE WHEN ISNULL(AVG(sChina)) THEN 0 ELSE AVG(sChina) END AS avg_china # 方式三 FROM grades WHERE sClass = '080601';
(2)實際結果
【3】小數位數
如上結果,比較介懷,爲何avg函數的後面那麼多小數位數,想要保留若干位數,又怎麼處理呢?
使用ROUND進行四合五入:
(1)以下SQL語句
SELECT sClass, COUNT(*) AS total, ROUND(IFNULL(AVG(sMath), 0), 1) AS avg_math, # 保留一位 ROUND(COALESCE(AVG(sEnglish), 0), 2) AS avg_english, # 保留兩位 CASE WHEN ISNULL(AVG(sChina)) THEN 0 ELSE AVG(sChina) END AS avg_china # 保留四位 FROM grades WHERE sClass = '080604'
(2)實際結果
Good Good Study, Day Day Up.
順序 選擇 循環 總結