在 kdb+ 中翻转 select 和索引访问 table 的不同结果
Different results of flip on select and on index-accessed table in kdb+
在 q
会话中,我制作了一个键控 table t
:
q)/KDB+ 3.6 2018.05.17
q)f:flip (`a`b)!(1 2 3;4 5 6)
q)k:flip (enlist `k)!(enlist 101 102 103)
q)t:k!f;t
k | a b
---| ---
101| 1 4
102| 2 5
103| 3 6
然后我尝试进行查询,结果很好:
q)select a,b from t where k=101
a b
---
1 4
q)flip select a,b from t where k=101
a| 1
b| 4
q)flip flip select a,b from t where k=101
a b
---
1 4
但是没有 select
-syntax 这会产生错误:
q)t[101]
a| 1
b| 4
q)flip t[101]
'rank
[0] flip t[101]
^
为什么我不能简单地 flip
得到与 select
相同数据类型的相同结果?
q)type flip select a,b from t where k=101
99h
q)type t[101]
99h
因为字典t[101]
的元素不是列表,而是原子。因此翻转原子列表失败。
首先将每个元素附加到一个空列表中是可行的。
q)(),/:t[101]
a| 1
b| 4
不一定是您想做的事情。对于给定的字典输出,您可能想要的解决方案是 enlist
q)enlist t[101]
a b
---
1 4
另一种方法是使用 table 查找而不是使用原子查找:
q)t[([]k:(),101)]
a b
---
1 4
这相当于 select a,b from t where k=101
在 q
会话中,我制作了一个键控 table t
:
q)/KDB+ 3.6 2018.05.17
q)f:flip (`a`b)!(1 2 3;4 5 6)
q)k:flip (enlist `k)!(enlist 101 102 103)
q)t:k!f;t
k | a b
---| ---
101| 1 4
102| 2 5
103| 3 6
然后我尝试进行查询,结果很好:
q)select a,b from t where k=101
a b
---
1 4
q)flip select a,b from t where k=101
a| 1
b| 4
q)flip flip select a,b from t where k=101
a b
---
1 4
但是没有 select
-syntax 这会产生错误:
q)t[101]
a| 1
b| 4
q)flip t[101]
'rank
[0] flip t[101]
^
为什么我不能简单地 flip
得到与 select
相同数据类型的相同结果?
q)type flip select a,b from t where k=101
99h
q)type t[101]
99h
因为字典t[101]
的元素不是列表,而是原子。因此翻转原子列表失败。
首先将每个元素附加到一个空列表中是可行的。
q)(),/:t[101]
a| 1
b| 4
不一定是您想做的事情。对于给定的字典输出,您可能想要的解决方案是 enlist
q)enlist t[101]
a b
---
1 4
另一种方法是使用 table 查找而不是使用原子查找:
q)t[([]k:(),101)]
a b
---
1 4
这相当于 select a,b from t where k=101