零值合并函数有什么作用?
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_orders
是 NULL
,则 number_of_orders
中返回的结果将为 0。
我一直在探索 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_orders
是 NULL
,则 number_of_orders
中返回的结果将为 0。