KDB/Q:如何为 select 编写函数
KDB/Q: How to write a function for select by
我们知道我们可以编写这样的函数
select avg val by category from tab
但是如果我需要写一个复杂的自定义函数怎么办
select myfunc by category from tab
此处 myfund 将使用选项卡中的多个列进行计算。例如在 myfunc 中,我可能会做另一层 select by,可能会做一些过滤等。作为一个基本示例,我如何在 a+b+c+d
下方包装
select a+b+c+d by category from tab
在 myfunc 中,它可以看到 a、b、c 和 d 列,并将对它们进行一些操作?
您可以将列以表格格式传递到您的函数中,例如:
q)t:([]col1:10?`a`b`c;col2:10?10;col3:10?1f;col4:10?.z.D)
q)select {break}[([]col2;col3;col4)] by col1 from t
'break
[1] {break}
^
q))x
col2 col3 col4
-------------------------
9 0.5785203 2008.02.04
7 0.1959907 2003.07.05
8 0.6919531 2007.12.27
如果您要在函数中使用所有列,那么另一种方法是将 table 分组为子 table 和 运行 每个子table:
func each t group t`col1
您可以很容易地用您自己的函数替换 avg,如下所示:
select {[a;b;c;d]a+b+c+d}[a;b;c;d] by category from tab
如果你想逐行使用 each-both '
select {[a;b;c;d]a+b+c+d} ' [a;b;c;d] by category from tab
您能否提供一个示例,说明您试图通过函数内部的附加 by/filtering 实现什么?在我看来这不是最好的方法
我们知道我们可以编写这样的函数
select avg val by category from tab
但是如果我需要写一个复杂的自定义函数怎么办
select myfunc by category from tab
此处 myfund 将使用选项卡中的多个列进行计算。例如在 myfunc 中,我可能会做另一层 select by,可能会做一些过滤等。作为一个基本示例,我如何在 a+b+c+d
select a+b+c+d by category from tab
在 myfunc 中,它可以看到 a、b、c 和 d 列,并将对它们进行一些操作?
您可以将列以表格格式传递到您的函数中,例如:
q)t:([]col1:10?`a`b`c;col2:10?10;col3:10?1f;col4:10?.z.D)
q)select {break}[([]col2;col3;col4)] by col1 from t
'break
[1] {break}
^
q))x
col2 col3 col4
-------------------------
9 0.5785203 2008.02.04
7 0.1959907 2003.07.05
8 0.6919531 2007.12.27
如果您要在函数中使用所有列,那么另一种方法是将 table 分组为子 table 和 运行 每个子table:
func each t group t`col1
您可以很容易地用您自己的函数替换 avg,如下所示:
select {[a;b;c;d]a+b+c+d}[a;b;c;d] by category from tab
如果你想逐行使用 each-both '
select {[a;b;c;d]a+b+c+d} ' [a;b;c;d] by category from tab
您能否提供一个示例,说明您试图通过函数内部的附加 by/filtering 实现什么?在我看来这不是最好的方法