将多个参数传递给select中的函数

时间:2013-12-03 14:10:39

标签: kdb

我想使用select计算一个新列,它是多列的函数。

我的实际应用程序将涉及select中的分组,因此我将传递给函数的列条目将包含列表。但是这个简单的例子说明了我的问题

t:([] a:1 2 3; b:10 20 30; c:5 6 7)

/ Pass one argument, using projection (set first two arguments to 1)
select s:{[x;y;z] x+y+z}[1;1;] each a from t 

/ Pass two arguments using each-both (set first arg to 1)
select s:a {[x;y;z] x+y+z}[1;;]'b from t 

现在,我如何传递三个或更多参数?

2 个答案:

答案 0 :(得分:8)

每个'都可以正常工作,但最好尽可能使用矢量操作。我在这里使用。运算符应用我们的函数,\ t来计算两种方法的时间。我将他们的结果存储到r1 / r2以显示它们是相同的:

q)t:([]a:til n;b:til n;c:til n:1200300)
q)\t r1:update d:{x+y+z}'[a;b;c] from t
289
q)\t r2:update d:{x+y+z} . (a;b;c) from t
20
q)r1~r2
1b
q)r2
a  b  c  d
-----------
0  0  0  0
1  1  1  3
2  2  2  6
3  3  3  9
4  4  4  12
5  5  5  15
..

干杯, 莱恩

答案 1 :(得分:1)

以下表格一般适用

q)t:([]a:til 10;b:til 10;c:til 10)
q)select d:{x+y+z}'[a;b;c] from t
d
--
0
3
6
9
..