coalesce函數

具體怎么用呢?
上面的函數說明通俗來說coalesce()的作用是:返回傳入的參數中第一個非null的值。expre1不為空值則返回expre1;否則判斷expre2是否是空值,如果expre2不為空值則返回expre2;否則判斷expre3是否是空值,如果expre3不為空值則返回expre3;……以此類推,如果所有的表達式都為空值,則返回NULL。
為簡單起見,舉例如下:
1、 input:select coalesce(NULL,NULL,1)
output:1

2、 如果傳入的參數所有都是NULL,則返回NULL,比如
input:select coalesce(NULL,NULL,NULL,NULL,NULL)
output:NULL

3、 最常用的一種用法是假設某個字段除了有實例的記錄之外都是默認值NULL,但后續計算需要用到這個字段,如果為NULL的話無法計算或展示,現在想將該字段中的NULL值全部替換成0,則可以使用coalesce()函數。以下的sql能夠很好的展示其具體是怎么進行操作的:
CREATE TABLE
IF NOT EXISTS test (
id INT (11) PRIMARY KEY auto_increment COMMENT '主鍵id',
score INT (11) COMMENT '分數',
score_avg INT (11) COMMENT '平均分數'
);
INSERT INTO test(id, score,score_avg)
VALUES
(1, 90, 80),
(2, 56, 80),
(3, NULL, 80),
(4, 69, 80),
(5, 89, 80),
(6, 99, 80),
(7, 100, 80),
(8, NULL, 80),
(9, 47, 80),
(10, NULL, 80),
(11, NULL, 80),
(12, 78, 80);
以上是建表語句以及插入數據的Mysql語句。現在要將score中的NULL值替換成0。
select id,score,coalesce(score, 0) as score_act from test;

從以上結果清楚的看出,coalesce(score, 0) as score_act新的一列當score不是NULL值時取原值,當score是NULL值時取0。
4、在例子3的基礎上再舉一個例子。
update test set score_avg = NULL where id = 3;
則原始數據如下所示:

select id, score, score_avg, coalesce(score, score_avg, 0) as score_act from test;
結果如下:

可以看出,coalesce(score,score_avg,0) as score_act表示:
當score = 非空值時,score_act = score 例如id = 1、4
當score = NULL值時,看score_avg的值,若score_avg = 非空值,score_act = score_avg 例如id = 8、10、11
若score_avg = NULL,則score_act =0 例如id = 3
轉載於:https://blog.csdn.net/lingaixuexi/article/details/93483164
