【问题标题】:kdb getting float from integer divisionkdb 从整数除法中获得浮点数
【发布时间】:2017-05-09 05:57:49
【问题描述】:

我有一张桌子

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) as my_column_name ...)

【问题讨论】:

    标签: kdb


    【解决方案1】:

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

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

    参考这里; 分区: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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      相关资源
      最近更新 更多