gpt4 book ai didi

sum - 获取聚合函数以在 KDB 中返回 null

转载 作者:行者123 更新时间:2023-12-04 18:34:19 24 4
gpt4 key购买 nike

在 SQL 中,聚合函数 sum(x)、avg(x)、max(x)、min(x)
当 x 为空或仅包含 NULL 值时将返回 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 ?

谢谢!

最佳答案

对于 min/max,您可以通过使用 int/long 列表添加和减去 1 来做一些技巧,以确保返回空值。 Attila Vrabecz 最近在 kxCon2016 上提到了这一点。这是对空和无穷大如何/在哪里出现在“数轴”上的操纵。但它们不是很通用,并且特定于每个操作:

q)a:`int$()
q)b:1 2 3i
q)c:0N 0Ni

q)-1+max 1+a
0N
q)-1+max 1+b
3
q)-1+max 1+c
0N

q)1+min a-1
0N
q)1+min b-1
1
q)1+min c-1
0N

关于sum - 获取聚合函数以在 KDB 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39810632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com