我一直在探索 dbt 工具,并且遇到了以下代码片段:
coalesce(customer_orders.number_of_orders, 0) as number_of_orders
我知道合并函数用于返回列表中的第一个非空 value 。我不明白的是第二个参数中的零是什么意思?
回答1
https://www.w3schools.com/sql/func_mysql_coalesce.asp 函数返回列表中的第一个非空 value。 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。
回答2
COALESCE
可以使用任意数量的参数。在大多数情况下(如您的示例中), COALESCE(some_column,0)
用于防止创建总和或建立平均值不会导致所需的结果。
假设有三列,并且您想对它们求和。如果您不使用 COALESCE
,则总和将为 NULL
,即使您的三列中只有一列是 NULL
。因此,您将使用 COALESCE
并将 NULL
values 替换为零,以便接收所有 NOT NULL
values 的总和。您可以将 COALESCE
“翻译”为 CASE WHEN
构造:
COALESCE(column1,0)
执行以下操作:
CASE WHEN column1 IS NULL THEN 0 ELSE column1 END
COALESCE
的另一个用例是如果 column1 是 NULL
,如果 column2 也是 NULL
,则将 column1 替换为 column2,以 column3 等为例。我在这里创建了一个示例,因此您可以明白我的意思:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=ff21b133a3a8c74673044462f7a110df