Kdb 如何对单个记录中的多个元素求和

Kdb 如何对单个记录中的多个元素求和,kdb,Kdb,我有桌上交易:[]时间:`time$;sym:`symbol$;价格:`浮动$;尺寸:`长$ 有1000条记录,10条独特的符号。我想对每个sym的前4个价格求和 我的代码如下所示: priceTable: select price by sym from trade; amountTable: select count price by sym from trade; amountTable: `sym`amount xcol amountTable; resultTable: amountT

我有桌上交易:[]时间:`time$;sym:`symbol$;价格:`浮动$;尺寸:`长$ 有1000条记录,10条独特的符号。我想对每个sym的前4个价格求和

我的代码如下所示:

priceTable: select price by sym from trade;
amountTable: select count price by sym from trade;
amountTable: `sym`amount xcol amountTable;
resultTable: amountTable ij priceTable;
所以我的新表看起来像:resultable

命令的结果:res:从resultable中选择总价,其中i=1:

现在,当我想对我收到的元素求和时:sum res

当我要计算res中的元素时:count res


我假设res是一个具有多个值的单记录,如何对所有这些值求和,或者如何首先对其求和?

您可以使用每个值对每行进行求和:

select sum each price from res
或者,如果要在ResourceTable上运行:

select sum each price from resoultTable
要对每行的前四个价格求和,请在每行右键使用二元数:

select sum each 4#/:price from resoultTable
或者,您可以通过一个步骤轻松完成所有这些:

select COUNT:count i, SUM:sum price, SUM4:sum 4#price by sym from trade
take运算符的一个警告是,如果列表中的元素小于take计数,它会将列表视为循环,并开始重新运行重复结果。例如,查看符号b和c的第四个价格

使用sublist可以确保它的元素数小于传递的count参数,它只返回较小的列表

 q)select sublist[4;price] by sym from trade
 sym| price
 ---| ----------------
 a  | 100 103 106 109f
 b  | 101 104 107f
 c  | 102 105 108f

如果mnestor的答案解决了您的问题,您可能应该将其标记为已接受。如果没有,让我们知道还缺少什么。
select sum each price from resoultTable
select sum each 4#/:price from resoultTable
select COUNT:count i, SUM:sum price, SUM4:sum 4#price by sym from trade
 q)trade:([]time:10?.z.d; sym:10#`a`b`c; price:100.+til 10; size:10+til 10)
 q)select 4#price by sym from trade
 sym| price
 ---| ---------------
 a  | 100 103 106 109
 b  | 101 104 107 101    //101 - 2 times
 c  | 102 105 108 102    //102 - 2 times
 q)select sublist[4;price] by sym from trade
 sym| price
 ---| ----------------
 a  | 100 103 106 109f
 b  | 101 104 107f
 c  | 102 105 108f