在SQL中,當x爲空或僅包含NULL值時,聚合函數sum(x),avg(x),max(x),min(x) 將返回NULL。獲取聚合函數以在KDB中返回null
在KDB中,sum和avg返回零,而max和min返回(+或 - )無窮大。
要得到返回null期望的行爲我想出了2種選擇:
(A)卸下空值,並檢查如果結果是空的聚集和往常一樣
nsum:{[x] x: x where not null x; $[0=count x; 0N; sum x]}
之前( B)創建一個新的聚合,在累積之前檢查每個項目是否爲空
請注意,我們仍然需要檢查空白列表。
nsum:{[z] $[0=count z; 0N; {[x;y] $[null x; y; null y; x; x+y]}/ z ]}
有沒有比A或B更好(更快和/或更方便)的方式? (B)方法會比方法(A)更好嗎?方法(A)具有適用於任何集合函數的優點。方法(B)不適用於「平均值」,因爲沒有成對函數 這將產生一個運行平均值(需要知道已經應用了多少項)。
有關的問題:有沒有比0=count x
檢查空列表更快的方法,例如0= type first x
?
謝謝!