目录
一、函数COALESCE
COALESCE(expression_1, expression_2, ...,expression_n)
二、解读
coalesce( f1, f2, f3, ... fn)
coalesce用于:f1有值,返回f1,若为null,则看f2,f2有值,则返回f2,若为null,继续往后。以此类推。
简单说就是:f1若为null,则取f2,f2若为null,则取f3,以此类推。
三、使用
1.0版本
select coalesce(start_time,end_time,'2023-01-01') from t1
如果start_time有值,则取的是start_time的值,如果start_time为null,则取end_time,如果end_time也为null,则返回2023-01-01
2.0版本——行转列中会用到coalesce()
例如:一个单号下,有多条数据,状态值不一样。即 group by id,status;,一个id下有多种status。现在希望:这个id下,如果status的值既有 状态1 也有 状态2,则使用 状态1,如果没有 状态1 只有 状态2,就使用状态2。但由于是多行数据,行与行的对比很复杂。
先进行 行转列,将这个id下的多行数据转成一行。status的值作为不同的字段保存。
sql如下:
select id,
max((case status when 'input' then data end )) as status_input,
max((case status when 'output' then data end)) as status_output
from t1
group by id
结果大致如下:没有值的就为null
factory|start_date|input_value|auto_value|
-------+----------+-----------+----------+
t1 |2023-06-01| 15.23152| |
t1 |2023-06-02| 16.23152| 17.23152|
t1 |2023-06-03| 19.23152| 18.23152|
t1 |2023-06-04| | 20.23152|
t1 |2023-06-05| | 43.46304|
t1 |2023-06-06| | 15.23152|
再对其使用 coale