零值合并函数有什么作用?

What does a zero value coalesce function do?

我一直在探索 dbt 工具,我遇到了以下代码片段:

coalesce(customer_orders.number_of_orders, 0) as number_of_orders

我知道合并函数用于 return 列表中的第一个非空值。我不明白的是第二个参数中的零是什么意思?

COALESCE 可以使用任意数量的参数。在大多数情况下(如您的示例),COALESCE(some_column,0) 用于防止创建总和或建立平均值不会导致所需的结果。

假设有三列,你想对它们求和。如果您不使用 COALESCE,总和将为 NULL,即使您的三列中只有一列是 NULL。因此,您将使用 COALESCE 并将 NULL 值替换为零,以获得所有 NOT NULL 值的总和。 您可以将 COALESCE“翻译”成 CASE WHEN 结构:

COALESCE(column1,0)

执行以下操作:

CASE WHEN column1 IS NULL THEN 0 ELSE column1 END

COALESCE 的另一个用例是,如果 column1 是 NULL,则用 column2 替换 column1,如果 column2 也是 NULL,则采用 column3 等。 我在这里创建了一个例子,所以你可以明白我的意思: db<>fiddle

COALESCE 函数 returns 列表中的第一个 non-null 值。 COALESCE 可以接受 n 个参数。

COALESCE(val1, val2, ...., val_n)

所以根据查询:

coalesce(customer_orders.number_of_orders, 0) as number_of_orders

如果 customer_orders.number_of_ordersNULL,则 number_of_orders 中返回的结果将为 0。