kdb从整数除法浮点数

时间:2017-05-09 05:57:49

标签: kdb

我有一张桌子

id, turnover, qty

我要查询

select sum turnover, sum qty, (sum turnover) div (sum qty) by id from Table

然而,来自除法的结果值似乎是一个int并显示为0(因为单位价格远小于1)。我试图将结果转换为浮点数,但这没有帮助

select sum turnover, sum qty, `float$(`float$(sum turnover) div `float$(sum qty)) by id from Table.

如何获得浮动回报? 另外,作为一个附带问题。如何命名列(等效于sql select sum(x)为my_column_name ...)

1 个答案:

答案 0 :(得分:2)

这是div的预期输出,你应该使用%来划分数字 - 它总是返回一个浮点数。

q)200 div 8.5
22
q)200%8.5
23.52941
q)

这里参考; Div:http://code.kx.com/q/ref/arith-integer/#div %:http://code.kx.com/q/ref/arith-float/#divide

*编辑

道歉 - 忘了引用你的其余问题了。在你的例子中,你计算总和营业额和总和数量两次 - 如果你要处理大量记录,你会想要避免这种情况。

这是怎么回事;

    q)show trade:([] id:(`$"A",'string[til 10]);turnover:10?til 10; qty:10?100+til 200)
    id turnover qty
    ---------------
    A0 4        152
    A1 4        238
    A2 2        298
    A3 2        268
    A4 7        246
    A5 2        252
    A6 0        279
    A7 5        286
    A8 7        245
    A9 5        191
    q)update toverq:sumT%sumQ from select sumT:sum turnover,sumQ:sum qty by id from trade
    id| sumT sumQ toverq     
    --| ---------------------
    A0| 4    152  0.02631579 
    A1| 4    238  0.01680672 
    A2| 2    298  0.006711409
    A3| 2    268  0.007462687
    A4| 7    246  0.02845528 
    A5| 2    252  0.007936508
    A6| 0    279  0          
    A7| 5    286  0.01748252 
    A8| 7    245  0.02857143 
    A9| 5    191  0.02617801