-->

如何总结从单个记录的多个元素(How to sum multiple elements from s

2019-10-18 06:40发布

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

当我希望计算资源要素: count res

1

我认为水库是有许多值的单个记录,我怎么能概括所有这些值,或者我怎么能先总和?

Answer 1:

您可以使用“每个”运行在每一行的总和:

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


Answer 2:

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

有一点需要注意take# )运算符,如果在列表中的元素比计数取较小,它将该列表作为圆形,并开始retruning的但却难免重复的结果。 如检查出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可以确保它在elemnts比通过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


文章来源: How to sum multiple elements from single record
标签: kdb