1

我有一个表trade:([]time:`time$(); sym:`symbol$(); price:`float$(); size:`long$()) ,例如 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;

所以我的新表看起来像: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 是具有许多值的单个记录,我怎样才能对所有这些值求和,或者我怎样才能先求和?

4

2 回答 2

3

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

select sum each price from res

或者,如果您想在 resultTable 上运行:

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
于 2013-06-24T03:51:34.027 回答
0
 q)trade:([]time:10?.z.d; sym:10#`a`b`c; price:100.+til 10; size:10+til 10)

take( ) 运算符的一个警告#是,如果列表中的元素小于 take count ,它会将列表视为循环并开始重新计算重复结果。例如,查看第 4 个price符号bc.

 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可以确保它的元素小于传递的计数参数,它只会返回较小的列表。

 q)select sublist[4;price] by sym from trade
 sym| price
 ---| ----------------
 a  | 100 103 106 109f
 b  | 101 104 107f
 c  | 102 105 108f
于 2018-06-24T08:34:26.290 回答