在 kdb 中的 fby 函数中将符号作为参数传递时出错

Error when passing symbol as argument in a function for fby in kdb

将符号作为参数传递给 fby 函数时出现长度错误。

Syntax: (aggr;data) fby group

我有一个 table:

 t:([] sym:10?`IBM`AMZN`MSFT; mkt:10?`m1`m2`m3; px:10?100.)

当尝试 运行 以下时失败并出现长度错误

{select from t where px=(min;px) fby x}`sym

如何将组作为参数传递给函数?

sym 变量(即列 sym)不在上下文中(因为它通常在 select 语句中),因为您是从在 select 声明之外。所以在这里你只是传递了一个内容为 "sym" 的符号类型的变量(因此长度错误)。以下作品,传入列 t[`sym]:

{select from t where px=(min;px) fby x}[t`sym]

如果您打算按不同的列进行分组,您可能需要考虑使用 functional select。例如

?[t;enlist (=;`px;(fby;(enlist;min;`px);`sym));0b;()]
sym  mkt px      
-----------------
MSFT m2  17.80839
AMZN m1  30.17723
IBM  m2  41.1597

或将列名传递给函数:

{?[t;enlist (=;`px;(fby;(enlist;min;`px);x));0b;()]}`sym