我一直在探索 dbt 工具,并且遇到了以下代碼片段:
coalesce(customer_orders.number_of_orders, 0) as number_of_orders
我知道合并函式用于回傳串列中的第一個非空值。我不明白的是第二個引數中的零是什么意思?
uj5u.com熱心網友回復:
COALESCE函式回傳串列中的第一個非空值。COALESCE可以接受 n 個引數。
COALESCE(val1, val2, ...., val_n)
所以根據查詢:
coalesce(customer_orders.number_of_orders, 0) as number_of_orders
萬一回傳的結果customer_orders.number_of_orders為0。NULLnumber_of_orders
uj5u.com熱心網友回復:
整數 0 不是 NULL,所以它可能是第一個非 NULL 引數,如果customer_orders.number_of_orders是 NULL。因此 0 作為默認值。
uj5u.com熱心網友回復:
COALESCE可以使用任意數量的引數。在大多數情況下(如您的示例中),COALESCE(some_column,0)用于防止創建總和或建立平均值不會導致所需的結果。
假設有三列,并且您想對它們求和。如果您不使用,即使您的三列中只有一列是COALESCE,總和也會是。因此,您將使用值并將值替換為零,以接收所有值的總和。您可以“翻譯”成一個構造:NULLNULLCOALESCENULLNOT NULLCOALESCECASE WHEN
COALESCE(column1,0)
執行以下操作:
CASE WHEN column1 IS NULL THEN 0 ELSE column1 END
的另一個用例COALESCE是將 column1 替換為 column2 如果 column1 是NULL,如果 column2 也是NULL,取 column3 等。我在這里創建了一個例子,所以你可以明白我的意思:
db<>fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474795.html
上一篇:如何對某些重復資料求和?
