q/KDB 使用函数选择多个符号 select
q/KDB Selecting multiple symbols using functional select
我正在尝试使用函数 select select 多个符号,但它抛出错误:
d:([] s:5#`v`b ; p:5?10)
?[d;enlist (in;`s;(),`v`b);0b;()]
'b
然而,当我 select 单个符号时,它 returns 正确数据
?[d;enlist (in;`s;(),`v);0b;()]
s p
---
v 8
v 4
v 2
我的查询到底有什么问题?
如果您 运行 解析等效的 q-sql 表达式,您将在解析树中看到 ,
:
q)parse"select from d where s in`v`b"
?
`d
,,(in;`s;,`v`b)
0b
()
这意味着 enlist
,因此如果您将其替换为查询应该有效:
q)?[d;enlist(in;`s;enlist`v`b);0b;()]
s p
---
v 8
b 1
v 9
b 5
v 4
q)?[d;enlist(in;`s;enlist`v);0b;()]
s p
---
v 8
v 9
v 4
在以下查询中,您没有明确列出要搜索的值
?[d;enlist (in;`s;(),`v`b);0b;()]
使用 enlist
多重符号将修复查询:
?[d;enlist (in;`s;enlist `v`b);0b;()]
当 enlist
未明确与值一起使用时,KDB 将其视为列名并尝试 运行 列之间的条件(如 columnA=columnB
)
另一个查询有效,因为 ()
在某种程度上是在征集要列出的原子;这就是 ()
与 enlist
的不同之处。
?[d;enlist (in;`s;(),`v);0b;()]
() vs 入伍
在 atoms 的情况下,它存档相同的结果
q)(),`a
,`a
q)enlist `a
,`a
但与列表一起使用时会给出不同的结果
q)type (),`a`b
11h
q)type enlist `a`b
0h
我正在尝试使用函数 select select 多个符号,但它抛出错误:
d:([] s:5#`v`b ; p:5?10)
?[d;enlist (in;`s;(),`v`b);0b;()]
'b
然而,当我 select 单个符号时,它 returns 正确数据
?[d;enlist (in;`s;(),`v);0b;()]
s p
---
v 8
v 4
v 2
我的查询到底有什么问题?
如果您 运行 解析等效的 q-sql 表达式,您将在解析树中看到 ,
:
q)parse"select from d where s in`v`b"
?
`d
,,(in;`s;,`v`b)
0b
()
这意味着 enlist
,因此如果您将其替换为查询应该有效:
q)?[d;enlist(in;`s;enlist`v`b);0b;()]
s p
---
v 8
b 1
v 9
b 5
v 4
q)?[d;enlist(in;`s;enlist`v);0b;()]
s p
---
v 8
v 9
v 4
在以下查询中,您没有明确列出要搜索的值
?[d;enlist (in;`s;(),`v`b);0b;()]
使用 enlist
多重符号将修复查询:
?[d;enlist (in;`s;enlist `v`b);0b;()]
当 enlist
未明确与值一起使用时,KDB 将其视为列名并尝试 运行 列之间的条件(如 columnA=columnB
)
另一个查询有效,因为 ()
在某种程度上是在征集要列出的原子;这就是 ()
与 enlist
的不同之处。
?[d;enlist (in;`s;(),`v);0b;()]
() vs 入伍
在 atoms 的情况下,它存档相同的结果
q)(),`a
,`a
q)enlist `a
,`a
但与列表一起使用时会给出不同的结果
q)type (),`a`b
11h
q)type enlist `a`b
0h