MySQL中將查詢出來的值null轉爲0的方法

1.IFNULL()方法

一般我們在使用ifnull()方法的時候,都是類似下面的語句:

IFNULL(expr1,expr2)

如果expr1不是NULL,IFNULL()返回expr1,否則它返回expr2。IFNULL()返回一個數字或字符串值

select ifnull(name,'no name') from person;

但是,有幾種情況,使用ifnull()方法無法將null轉換成0。這時,我們可以轉換一下思路。

當出現多表查詢的時候,我們可以使用left join 等表連接的方法解決將null轉換成0的問題。

當使用group by的情況下,使用ifnull也是不可以的,因爲這個時候是返回的集合爲空,ifnull無法處理,這個時候可以將數據再包一層的方法進行處理,如下:

select COUNT(*) from (select *  from user_operator  where  type=400 )  as a

from裏面包裹的是要進行計算的查詢,然後在外面在執行一次count即可。

2.COALESCE函數

COALESCE函數從值列表中返回第一個非NULL的值,當遇到NULL值時將其替換爲0。 coalesce(str1,str2....);

       需要在表中查出所有比'WARD'提成(COMM)低的員工,提成爲NULL的員工也包括在內。 (個人意見,如果數據庫提成字段默認值不是爲0值的話肯定是開發那個的錯)。

select ename,comm from emp where coalesce(comm,0) < (select comm from emp whrer ename ="WARD");

結果:

+--------+------+
| ename  | comm |
+--------+------+
| SMITH  | NULL |
| ALLEN  |  300 |
| JONES  | NULL |
| BLAKE  | NULL |
| CLARK  | NULL |
| SCOTT  | NULL |
| KING   | NULL |
| TURNER |    0 |
| JAMES  | NULL |
| MILLER | NULL |
| ADAMS  | NULL |
| FORD   | NULL |
+--------+------+
12 rows in set

 

返回非NULL值:

select ename, comm,coalesce(comm,0) from emp where coalesce(comm,0) < (select comm from emp where ename = 'WARD');
+--------+------+------------------+
| ename  | comm | coalesce(comm,0) |
+--------+------+------------------+
| SMITH  | NULL |                0 |
| ALLEN  |  300 |              300 |
| JONES  | NULL |                0 |
| BLAKE  | NULL |                0 |
| CLARK  | NULL |                0 |
| SCOTT  | NULL |                0 |
| KING   | NULL |                0 |
| TURNER |    0 |                0 |
| JAMES  | NULL |                0 |
| MILLER | NULL |                0 |
| ADAMS  | NULL |                0 |
| FORD   | NULL |                0 |
+--------+------+------------------+
12 rows in set

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章