我有一个表rCom,它有各种各样的列。我想在每一行中总结一下..
例如:
日期类型A TypeB TypeC TypeD
date1 40.5 23.1 45.1 65.2
date2 23.3 32.2 56.1 30.1
如何编写q查询以添加第四列'Total',它们在每行之间求和?
答案 0 :(得分:2)
为什么不呢:
update Total: TypeA+TypeB+TypeC+TypeD from rCom
答案 1 :(得分:2)
总和可以正常工作:
q)flip`a`b`c!3 3#til 9
a b c
-----
0 3 6
1 4 7
2 5 8
q)update d:sum(a;b;c) from flip`a`b`c!3 3#til 9
a b c d
--------
0 3 6 9
1 4 7 12
2 5 8 15
Sum有一个map reduce,对于一个巨大的表来说会更好。
答案 2 :(得分:1)
关于行之间求和的一个快速点。您应该注意1列中的空值,导致总和为空结果。借用@WooiKent Lee的例子。
我们将null放入a列的第一个位置。注意我们的总和现在变为空
q)wn:.[flip`a`b`c!3 3#til 9;(0;`a);first 0#] //with null
q)update d:sum (a;b;c) from wn
a b c d
--------
3 6
1 4 7 12
2 5 8 15
这是q
中空值的处理方式的直接影响。如果对一个简单列表求和,则忽略空值
q)sum 1 2 3 0N
6
但是,一般列表中的总和不会显示此行为
q)sum (),/:1 2 3 0N
,0N
因此,对于您的桌面情况,您可能希望事先填写零
q)update d:sum 0^(a;b;c) from wn
a b c d
--------
3 6 9
1 4 7 12
2 5 8 15
或者,将其作为s.t.你实际上是在简单列表而不是一般列表中进行求和。
q)update d:sum each flip (a;b;c) from wn
a b c d
--------
3 6 9
1 4 7 12
2 5 8 15
有关零处理的更完整参考,请参阅the reference website
答案 3 :(得分:0)
这是有用的:
select Answer:{[x;y;z;a] x+y+z+a }'[TypeA;TypeB;TypeC;TypeD] from
([] dt:2014.01.01 2014.01.02 2014.01.03; TypeA:4 5 6; TypeB:1 2 3; TypeC:8 9 10; TypeD:3 4 5)