Mysql使用sum()函數(shù)返回null的問(wèn)題詳解
介紹
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值。
問(wèn)題
在項(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í)行了一遍出問(wèn)題的sql和參數(shù),發(fā)現(xiàn)結(jié)果中確實(shí)是返回了 null :

按我之前開發(fā)時(shí)的想法:
- 如果有相應(yīng)的數(shù)據(jù),返回求和后的值
- 如果沒有符合條件的數(shù)據(jù),返回 0
結(jié)果,當(dāng)沒有符合條件的數(shù)據(jù)時(shí)卻返回了 null 。
解決
可以通過(guò)結(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ū)別
上面說(shuō)道,使用 ISNULL 或 COALESCE 函數(shù)都可以解決為 null 的問(wèn)題,那么這兩個(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問(wèn)題的文章就介紹到這了,更多相關(guān)Mysql用sum()返回null內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL實(shí)現(xiàn)數(shù)據(jù)更新的示例詳解
這篇文章主要為大家詳細(xì)介紹了MySQL實(shí)現(xiàn)數(shù)據(jù)更新的相關(guān)資料,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
MySQL優(yōu)化GROUP BY(松散索引掃描與緊湊索引掃描)
這篇文章主要介紹了MySQL優(yōu)化GROUP BY(松散索引掃描與緊湊索引掃描),需要的朋友可以參考下2016-05-05
Mysql按條件計(jì)數(shù)多種實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Mysql按條件計(jì)數(shù)多種實(shí)現(xiàn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
mysql-connector-java和mysql-connector-j的區(qū)別小結(jié)
在Java項(xiàng)目中,引入MySQL數(shù)據(jù)庫(kù)通常需通過(guò)Maven管理MySQLConnector/J驅(qū)動(dòng),最新版本的spring-boot-starter-parent中,舊的mysql-connector-java坐標(biāo)不再適用,需改用新的com.mysql:mysql-connector-j,下面就來(lái)介紹一下區(qū)別,感興趣的可以了解一下2024-09-09
MySQL分組的時(shí)候遇到ONLY_FULL_GROUP_BY報(bào)錯(cuò)問(wèn)題及解決方案
這篇文章主要介紹了MySQL分組的時(shí)候遇到ONLY_FULL_GROUP_BY報(bào)錯(cuò)問(wèn)題及解決方案,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04

