3

我有一个表 rCom,它有不同的列。我想总结每一行..

例如:

日期类型A 类型B 类型C 类型D

日期 1 40.5 23.1 45.1 65.2

日期2 23.3 32.2 56.1 30.1

如何编写 aq 查询以添加第四列“总计”,该列对每一行求和?

4

4 回答 4

2

Sum 可以正常工作:

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,这对于大表来说会更好。

于 2014-03-24T12:18:42.233 回答
2

为什么不只是:

update Total: TypeA+TypeB+TypeC+TypeD from rCom

?

于 2014-03-24T10:39:24.840 回答
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

或者,使您实际上是在简单列表而不是一般列表中求和。

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

有关 null 处理的更完整参考,请参阅参考网站

于 2014-06-05T18:15:27.850 回答
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) 
于 2014-03-24T09:22:58.263 回答