Mysql 聚合函數返回NULL


【1】聚合函數返回NULL

當where條件不滿足時,聚合函數sum()、avg()的返回值為NULL。

(1)源數據表

(2)如下SQL語句

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)實際結果:

溫馨提醒:如果不想要這行NULL值的結果集,可以參見隨筆《Mysql AVG() 值返回NULL而非空結果集

【2】解決方案

因為某種需要,我們實在不想出現NULL這個值,想用0表示,可怎么處理呢?

有三種方式:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM