函数返回kdb/q中的表

函数返回kdb/q中的表,kdb,Kdb,我是kdb/q新手,不熟悉kdb\q功能,希望有人能帮我。问题是: 我有一个简单的q函数,声明如下: func:{[x;y] x+y} 而{[x;y]x+y}[3;4]给了我答案7。一切都很完美 如果我有一个带有两列的表t,例如: _x _y -------- 3 4 2 5 6 2 ... 我可以在q中使用一个函数,以便为表的每一行t计算x+y? 我的预期回报是: res --- 7 7 8 ... 非常感谢 您只需将列名作为参数传递给函数: q)tab:([

我是kdb/q新手,不熟悉kdb\q功能,希望有人能帮我。问题是: 我有一个简单的q函数,声明如下:

func:{[x;y] x+y}
{[x;y]x+y}[3;4]
给了我答案
7
。一切都很完美

如果我有一个带有两列的表
t
,例如:

_x   _y
--------
3     4
2     5
6     2
...
我可以在q中使用一个函数,以便为表的每一行
t
计算
x+y
? 我的预期回报是:

res
---
7
7
8
...

非常感谢

您只需将列名作为参数传递给函数:

q)tab:([]x:1 2 3;y:4 5 6)
q)func:{[x;y] x+y}
q)
q)select res:func[x;y]from tab
res
---
5
7
9
q){?[x;();0b;enlist[`res]!enlist(`func;y;z)]}[tab;`x;`y]
res
---
5
7
9
或者,您可以使用函数形式将该查询转换为函数:

q)tab:([]x:1 2 3;y:4 5 6)
q)func:{[x;y] x+y}
q)
q)select res:func[x;y]from tab
res
---
5
7
9
q){?[x;();0b;enlist[`res]!enlist(`func;y;z)]}[tab;`x;`y]
res
---
5
7
9

您只需将列名作为参数传递给函数:

q)tab:([]x:1 2 3;y:4 5 6)
q)func:{[x;y] x+y}
q)
q)select res:func[x;y]from tab
res
---
5
7
9
q){?[x;();0b;enlist[`res]!enlist(`func;y;z)]}[tab;`x;`y]
res
---
5
7
9
或者,您可以使用函数形式将该查询转换为函数:

q)tab:([]x:1 2 3;y:4 5 6)
q)func:{[x;y] x+y}
q)
q)select res:func[x;y]from tab
res
---
5
7
9
q){?[x;();0b;enlist[`res]!enlist(`func;y;z)]}[tab;`x;`y]
res
---
5
7
9

由于
+
被重载,无法同时使用atom和list,
res:func[x;y]
将工作得非常好;但是,如果二元函数只接受作为原子而不是列表的参数,则
两者都将起作用:

q)select res:func'[x;y] from tab  // using each-both func'[x;y]
res
---
5
7
9
e、 g从列
s

tab2:([] c:1 2 3;s:("123";"1234";"123456"))
q)update res:#'[c;s] from tab2  //func'[x;y]
c   s         res
-----------------------
1   "123"     enlist "1"
2   "1234"    "12"
3   "123456"  "123"

由于
+
被重载,无法同时使用atom和list,
res:func[x;y]
将工作得非常好;但是,如果二元函数只接受作为原子而不是列表的参数,则
两者都将起作用:

q)select res:func'[x;y] from tab  // using each-both func'[x;y]
res
---
5
7
9
e、 g从列
s

tab2:([] c:1 2 3;s:("123";"1234";"123456"))
q)update res:#'[c;s] from tab2  //func'[x;y]
c   s         res
-----------------------
1   "123"     enlist "1"
2   "1234"    "12"
3   "123456"  "123"

那是阿威森!你能给我解释一下第二种选择吗>?我不太明白,它是用select的函数形式工作的,这是非常详细的描述。要查看查询的函数形式,您可以运行
parse“select res:func[x;y]from tab”
,它将输出组成查询所需的4个参数。非常感谢!还有一个快速问题:我有一个函数
func:{[id;time]从synp\t中选择last synp,其中instr\u id=id,tp\u time
;但是当我运行
func[81;05:01:06 05:06:01]
时,它会给我“长度错误”。。你知道我哪里错了吗?那是阿威森!你能给我解释一下第二种选择吗>?我不太明白,它是用select的函数形式工作的,这是非常详细的描述。要查看查询的函数形式,您可以运行
parse“select res:func[x;y]from tab”
,它将输出组成查询所需的4个参数。非常感谢!还有一个快速问题:我有一个函数
func:{[id;time]从synp\t中选择last synp,其中instr\u id=id,tp\u time
;但是当我运行
func[81;05:01:06 05:06:01]
时,它会给我“长度错误”。。你知道我哪里错了吗。。?