COALESCE(T v1, T v2, …)

COALESCE,读作 /ˌkəʊəˈles/,该函数用于返回第一个不为 NULLv,如果所有 v 都为 NULL,则返回 NULL

举个例子:

SELECT COALESCE(A, B, C) FROM TABLE_NAME

该 SQL 的返回值判断过程如下:

如果 A 不为 NULL,则返回 A,否则判断 B 是否为 NULL,若 B 不为 NULL,则返回 B,否则继续判断 C 是否为 NULL,若 C 不为 NULL,则返回 C,否则返回 NULL

使用场景

一个常用的场景是在一张表中的某个字段的默认值为 NULL,在查询的时候,如果该字段为 NULL,我们希望返回其他有意义的值而不是 NULL 值,这时就可以使用 COALESCE 函数。

例如,用户表(dwd_user)中的常驻城市字段(city),如果为 NULL 时,我们希望在返回给最终用户时可以显示“未知”,而不是 NULL 值,可以这么写:

1
SELECT COALESCE(city, ‘未知’) FROM dwd_user

另一个常用场景是两张表做 FULL JOIN 时,取字段不为 NULL 的字段值。

例如,表 A(COL1, COL2, COL3) 和表 B(COL1, COL2, COL3)FULL JOIN 关联,如果表 A 的字段值不为 NULL,则取表 A 的字段,否则取表 B 的字段:

1
2
3
4
5
6
SELECT
COALESCE(t1.COL1, t2.COL1),
COALESCE(t1.COL2, t2.COL2),
COALESCE(t1.COL3, t2.COL3)
FROM A t1
FULL JOIN B t2 ON t1.COL1 = t2.COL2

(END)