我有一张桌子
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 ...)
答案 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