Mysql使用sum()函數(shù)返回null的問題詳解
介紹
SUM()函數(shù)用于計算一組值或表達式的總和,SUM()函數(shù)的語法如下:
SUM(DISTINCT expression)
SUM()函數(shù)是如何工作的?
- 如果在沒有返回匹配行SELECT語句中使用SUM函數(shù),則SUM函數(shù)返回NULL,而不是0。
- DISTINCT運算符允許計算集合中的不同值。
- SUM函數(shù)忽略計算中的NULL值。
問題
在項目中使用 Mysql 中的 sum() 函數(shù)求和時,調(diào)試時發(fā)現(xiàn)報出下面的錯誤信息:
sql: Scan error on column index 0, name "total": converting NULL to int64 is unsupported
我相應執(zhí)行的sql語句如下:
SELECT SUM(consume) as total FROM task_income WHERE consume_type=3 AND uid=20;
驗證
為了找到原因,我在 Navicat 中執(zhí)行了一遍出問題的sql和參數(shù),發(fā)現(xiàn)結(jié)果中確實是返回了 null :

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

