Mysql 聚合函數返回NULL

【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.
順序 選擇 循環 總結

相關文章
相關標籤/搜索