簡單探討sum()函式返回null的問題

大雄45發表於2022-02-12
導讀 MySQL的Sum()函式是用來找出所有記錄的一個欄位的總和,下面這篇文章主要給大家介紹了關於Mysql使用sum()函式返回null的問題,文中透過例項程式碼介紹的非常詳細,需要的朋友可以參考下
介紹

SUM()函式用於計算一組值或表示式的總和,SUM()函式的語法如下:

SUM(DISTINCT expression)

SUM()函式是如何工作的?

如果在沒有返回匹配行SELECT語句中使用SUM函式,則SUM函式返回NULL,而不是0。

DISTINCT運算子允許計算集合中的不同值。

SUM函式忽略計算中的NULL值。

問題

在專案中使用 Mysql 中的 sum() 函式求和時,除錯時發現報出下面的錯誤資訊:

sql: Scan error on column index 0, name "total": converting NULL to int64 is unsupported

我相應執行的sql語句如下:

SELECT SUM(consume) as total FROM task_income WHERE consume_type=3 AND uid=20;
驗證

為了找到原因,我在 Navicat 中執行了一遍出問題的sql和引數,發現結果中確實是返回了 null :

按我之前開發時的想法:

如果有相應的資料,返回求和後的值

如果沒有符合條件的資料,返回 0

結果,當沒有符合條件的資料時卻返回了 null 。

解決

可以透過結合使用 ISNULL 或 COALESCE 函式來解決。

相應的示例如下:

SELECT IFNULL(SUM(Column1), 0) AS total FROM...
 
SELECT COALESCE(SUM(Column1), 0) AS total FROM...
區別

上面說道,使用 ISNULL 或 COALESCE 函式都可以解決為 null 的問題,那麼這兩個函式有什麼區別呢?

ISNULL 函式接受兩個引數,如果第一個引數不是 null 會直接返回,如果第一個引數是 null ,則返回第二個引數

COALESCE 函式可以接受兩個或多個引數,並返回第一個非 null 的引數,如果所有引數都為 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

到此這篇關於Mysql使用sum()函式返回null問題的文章就介紹到這了

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2855256/,如需轉載,請註明出處,否則將追究法律責任。

相關文章