Mysql使用sum()函數(shù)返回null的問題詳解
介紹
SUM()函數(shù)用于計(jì)算一組值或表達(dá)式的總和,SUM()函數(shù)的語(yǔ)法如下:
SUM(DISTINCT expression)
SUM()函數(shù)是如何工作的?
- 如果在沒有返回匹配行SELECT語(yǔ)句中使用SUM函數(shù),則SUM函數(shù)返回NULL,而不是0。
- DISTINCT運(yùn)算符允許計(jì)算集合中的不同值。
- SUM函數(shù)忽略計(jì)算中的NULL值。
問題
在項(xiàng)目中使用 Mysql 中的 sum() 函數(shù)求和時(shí),調(diào)試時(shí)發(fā)現(xiàn)報(bào)出下面的錯(cuò)誤信息:
sql: Scan error on column index 0, name "total": converting NULL to int64 is unsupported
我相應(yīng)執(zhí)行的sql語(yǔ)句如下:
SELECT SUM(consume) as total FROM task_income WHERE consume_type=3 AND uid=20;
驗(yàn)證
為了找到原因,我在 Navicat 中執(zhí)行了一遍出問題的sql和參數(shù),發(fā)現(xiàn)結(jié)果中確實(shí)是返回了 null :
按我之前開發(fā)時(shí)的想法:
- 如果有相應(yīng)的數(shù)據(jù),返回求和后的值
- 如果沒有符合條件的數(shù)據(jù),返回 0
結(jié)果,當(dāng)沒有符合條件的數(shù)據(jù)時(shí)卻返回了 null 。
解決
可以通過結(jié)合使用 ISNULL 或 COALESCE 函數(shù)來(lái)解決。
相應(yīng)的示例如下:
SELECT IFNULL(SUM(Column1), 0) AS total FROM... SELECT COALESCE(SUM(Column1), 0) AS total FROM...
區(qū)別
上面說道,使用 ISNULL 或 COALESCE 函數(shù)都可以解決為 null 的問題,那么這兩個(gè)函數(shù)有什么區(qū)別呢?
- ISNULL 函數(shù)接受兩個(gè)參數(shù),如果第一個(gè)參數(shù)不是 null 會(huì)直接返回,如果第一個(gè)參數(shù)是 null ,則返回第二個(gè)參數(shù)
- COALESCE 函數(shù)可以接受兩個(gè)或多個(gè)參數(shù),并返回第一個(gè)非 null 的參數(shù),如果所有參數(shù)都為 null,則會(huì)返回 null
參考
- How do I get SUM function in MySQL to return ‘0’ if no values are found? - Stack Overflow
- sql - What is the difference bewteen ifnull and coalesce in mysql? - Stack Overflow
總結(jié)
到此這篇關(guān)于Mysql使用sum()函數(shù)返回null問題的文章就介紹到這了,更多相關(guān)Mysql用sum()返回null內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MYSQL 隨機(jī) 抽取實(shí)現(xiàn)方法及效率分析
MYSQL的隨機(jī)抽取實(shí)現(xiàn)方法。舉個(gè)例子,要從tablename表中隨機(jī)提取一條記錄,大家一般的寫法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。2009-05-05PHP MYSQL注入攻擊需要預(yù)防7個(gè)要點(diǎn)
這篇文章主要介紹了PHP MYSQL開發(fā)中,對(duì)于注入攻擊需要預(yù)防的7個(gè)要點(diǎn),大家需要注意了2013-11-11關(guān)于Mysql update修改多個(gè)字段and的語(yǔ)法問題詳析
這篇文章主要給大家介紹了關(guān)于mysql update修改多個(gè)字段and的語(yǔ)法問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12解決大于5.7版本mysql的分組報(bào)錯(cuò)Expression #1 of SELECT list is not in GR
這篇文章主要介紹了解決大于5.7版本mysql的分組報(bào)錯(cuò)Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated問題,需要的朋友可以參考下2019-10-10C#實(shí)現(xiàn)MySQL命令行備份和恢復(fù)
MySQL數(shù)據(jù)庫(kù)的備份有很多工具可以使用,今天介紹一下使用C#調(diào)用MYSQL的mysqldump命令完成MySQL數(shù)據(jù)庫(kù)的備份與恢復(fù)2018-03-03MySQL 8.0.20 安裝教程圖文詳解(windows 64位)
這篇文章主要介紹了MySQL 8.0.20安裝教程(windows 64位),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有,需要的朋友可以參考下2020-05-05