求和運算經常用到ifnull和sum函數,以下對二者的使用方法和差別進行講解
1.IFNULL
使用方法:
select 列名1+ifnull(列名2,常數) from 表名;
使用要求:
1.其中列名1的值不能為空,列名1的值一旦為null,則“列名1+ifnull(列名2,0)”的結果就為null.
2.列名2的值可以為空,列名2 的值為空時 ifnull(列名2,常數)的傳回結果為常數的值,列名1的值再與其相加。(原因是:在使用IFNULL(參數1,參數2) 函數進行求和運算時, 會判斷參數1的值是否為null,如果為null傳回參數2的值,不為null傳回參數1的值。)
例子:圖為employee表中的記錄
以上是一張employee表,工資字段名為salary,獎金字段名為prize,工号字段名為id,現在要求查詢每個員工的工資和獎金總和。
代碼如下:
select id,salary+ifnull(prize,0)as 總工資 from employee;
查詢結果如下:
我們發現id為3的員工總工資為null,這是因為id為3的員工的salary字段的值為null,null+ifnull(參數1,參數2)不管ifnull括号裡的參數為什麼值相加的結果都為null;而id為4的員工的prize字段的值雖然為null,但最終的結果不為空。
2.SUM
聚合函數SUM():計算指定列的數值和,如果指定列類型不是數值類型,那麼計算結果為0.
使用方法:
select sum(列1+列2) from 表名
使用要求:
用sum函數求和時要求列1和列2 的值都不為null,否則結果為null。
例子:
還是這張employee表,其中記錄不變,改用sum函數進行查詢
select id, sum(salary+prize)as 總工資 from employee group by id;
結果如下:
我們發現有空值的列所對應的員工id的查詢最終結果都為null,這是因為用sum函數求和時要求列1和列2 的值都不為null,有一個列的值為null時,結果就為null。
總結:
1.查詢兩列的和時,如果某一列的值可能為空值時不能用SUM函數;
2.使用IFNULL進行求和時,
select 列名1+ifnull(列名2,常數) from 表名;
其中加号左邊的值(列1)的值不能為空,列1的值一旦為null,則運算的結果就為null;列2的值可以為空,列名2 的值為空時 ifnull(列名2,常數)的傳回結果為常數的值,列名1的值再與其相加。
3.使用SUM函數求和時,
SUM(列1+列2)
要求列1和列2 的值都不為null,否則結果為null。
技術交流微信:intboy520