MySQL兩列或多列求和的問題及coalesce()函數

1、問題

(文章開頭的資源爲本次使用的SQL腳本文件)在對數據庫的兩列或多列進行求和時,其中如果有一列爲如果存在值爲null的行,那麼求和後在對應行上求和字段的值也爲null,下面兩個SQL查詢語句展示的就是這種情況:

mysql> select * from my_test;
+----+------+-------+
| id | age  | money |
+----+------+-------+
|  1 |   12 |  NULL |
|  2 |   11 |  NULL |
|  3 | NULL |     1 |
+----+------+-------+
mysql> select id, age, money, age + money as temp from my_test;
+----+------+-------+-------------+
| id | age  | money |    temp     |
+----+------+-------+-------------+
|  1 |   12 |  NULL |        NULL |
|  2 |   11 |  NULL |        NULL |
|  3 | NULL |     1 |        NULL |
+----+------+-------+-------------+

2、解決方案

我們希望12加上null得到12,而不是null,爲此需要將null轉換爲0值,在MySQL中可以使用IFNULL()函數,該函數也是MySQL獨有的,它接收兩個參數,語法如下:

IFNULL(expression, alt_value)

這兩個參數都是必傳的,其中expression是被用來判斷值是否爲null的表達式,若爲null則返回第二個參數alt_value的值,若不爲null則返回expression的值。
在上面求和的SQL中使用ifnull()函數,再次做查詢操作:

mysql> select id, age, money, ifnull(age, 0) + ifnull(money, 0)  as temp from my_test;
+----+------+-------+------+
| id | age  | money | temp |
+----+------+-------+------+
|  1 |   12 |  NULL |   12 |
|  2 |   11 |  NULL |   11 |
|  3 | NULL |     1 |    1 |
+----+------+-------+------+

可以看到結果如我們所期望的。當做其他算術運算時如果有null值也可以考試使用ifnull()函數。

3、擴展一:sum()函數的使用

sum()函數可以返回某一列的數據總和,當該列有值爲null的記錄時,並不會導致整個求和結果爲null,下面爲對money列使用sum()後的結果:

mysql> select sum(money) from my_test;
+------------+
| sum(money) |
+------------+
|          1 |
+------------+

4、擴展二:coalesce()函數的使用

COALESCE函數與IFNULL函數
在SQL內置的函數中,有一個函數也具備與IFNULL()函數類似的功能,它便是COALESCE()函數。
既然是SQL內置的函數,它就能用在所有實現了SQL標準的數據庫產品中,它需要一個或多個參數(當只傳兩個參數時,它所實現的效果同IFNULL()函數),返回第一個non-null參數,如果所有的參數都是null則返回Null,如下面的執行結果:

mysql> select coalesce(null, null, '1');
+---------------------------+
| coalesce(null, null, '1') |
+---------------------------+
| 1                         |
+---------------------------+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章