COALESCE

COALESCE函数按从左到右的顺序依次检查输入参数,一旦遇到第一个非 NULL 值,便立即返回该值,后续参数将不再被评估。

命令格式

COALESCE(<expr1>, <expr2>, ...)

-- 标准示例。
-- 返回1。
SELECT coalesce(NULL,NULL,1,NULL,3,5,7);

参数说明

expr:必填。待验证的值。

返回值说明

返回值类型和参数数据类型相同。

使用示例

  • 示例1:参数值类型未定义,返回报错。

    -- 参数abc未定义类型,系统引擎无法识别。
    -- FAILED: ODPS-0130071:[1,34] Semantic analysis exception - column abc cannot be resolved
    SELECT COALESCE(NULL,NULL,1,NULL,abc,5,7);
    
    -- 返回1。
    SELECT COALESCE(NULL,NULL,1,NULL,'abc',5,7);
  • 示例2:在非表读取的情况下,如果参数值全部为空,则返回报错。

    -- 返回报错,会提示至少有一个参数值非NULL。
    -- FAILED: ODPS-0130071:[1,17] Semantic analysis exception - parameter 1 for function COALESCE expect at least one parameter should be non-null
    SELECT COALESCE(NULL,NULL,NULL,NULL);
  • 示例3:在表读取的情况下,如果参数值全部为空,则返回NULL。

    原始数据表:

    +-----------+-------------+------------+
    | shop_name | customer_id | total_price |
    +-----------+-------------+------------+
    | ad        | 10001       | 100.0      |
    | jk        | 10002       | 300.0      |
    | ad        | 10003       | 500.0      |
    | tt        | NULL        | NULL       |
    +-----------+-------------+------------+

    由原始数据表可以看出,tt的值全部为空。则执行以下语句后返回值为NULL。

    SELECT COALESCE(customer_id,total_price) FROM sale_detail WHERE shop_name='tt';

相关函数

COALESCE函数属于其他函数,更多其他业务场景的函数请参见其他函数