如何从单个记录中汇总多个元素

时间:2013-06-23 20:15:59

标签: kdb

我有桌子trade:([]time:`time$(); sym:`symbol$(); price:`float$(); size:`long$()) 与... 1000条记录,例如10个独特的syms。我想总结每个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;

所以我的新表格如下:resultTable

sym    | amount price  
-------| --------------------------------------------------------------
instr0 | 106    179.2208 153.7646 155.2658 143.8163 107.9041 195.521 ..

命令的结果:res: select sum price from resultTable where i = 1

price                                                                 
..
----------------------------------
14.71512 153.2244 154.1642 196.5744

现在,当我想要收到我收到的元素时:sum res

price| 14.71512 153.2244 154.1642 196.5744 170.6052 61.26522 45.70606
46.9057..

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

1

我假设res是具有许多值的单个记录,如何将所有这些值相加,或者如何首先求和?

2 个答案:

答案 0 :(得分:3)

您可以使用“each”在每一行上运行总和:

select sum each price from res

或者如果你想在resoultTable上运行:

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

答案 1 :(得分:0)

 q)trade:([]time:10?.z.d; sym:10#`a`b`c; price:100.+til 10; size:10+til 10)

使用take#)运算符的一个警告是,如果列表中的元素小于汇整计数,则将列表视为循环并开始重新输入重复结果。例如。签出符号priceb的第四个c

 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

使用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