我有桌子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是具有许多值的单个记录,如何将所有这些值相加,或者如何首先求和?
答案 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
(#
)运算符的一个警告是,如果列表中的元素小于汇整计数,则将列表视为循环并开始重新输入重复结果。例如。签出符号price
和b
的第四个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