根据 kdb 列表中的列内容选择行
Selecting rows based on column contents which are in a list in kdb
我有一个名为 'A' 的列表:
cont
"aa"
"bb"
"cc"
我有一个名为 'run' 的 table 包含列
first second third
sad random "aa"
happy random1 "dd"
我必须 select 来自 'run' 的那些行,其中第三列包含列表 A 中的元素。我是 kdb 的新手,非常感谢任何有关如何执行此操作的帮助。谢谢
您需要关键字 in
,它允许您检查一个列表中的值是否出现在另一个列表中:
q)show A:("aa";"bb";"cc")
"aa"
"bb"
"cc"
q)show run:([]f:("sad";"happy");s:("random";"random1");t:("aa";"dd"))
f s t
----------------------
"sad" "random" "aa"
"happy" "random1" "dd"
q)select from run where t in A
f s t
-------------------
"sad" "random" "aa"
如果 A
是未加密的 table,那么您可以使用 A`cont
:
拉出列 cont
q)show A:([]cont:("aa";"bb";"cc"))
cont
----
"aa"
"bb"
"cc"
q)select from run where t in A`cont
f s t
-------------------
"sad" "random" "aa"
当使用 in
时,输出是一个布尔列表,计数等于左侧参数的计数(在本例中为 1 2 3
):
q)1 2 3 in 2 4 6
010b
使用where
clause in the select
语句过滤返回的行。仅将 where
应用于布尔列表 returns 为真的索引:
q)where 1 2 3 in 2 4 6
,1
并且推而广之,table.
只会返回这些索引
还应注意,尽管您提供的 table 只是一个示例,但它包含关键字 first
作为列 header。应尽可能避免使用 header 等关键字,因为它们会导致意外行为。
我有一个名为 'A' 的列表:
cont
"aa"
"bb"
"cc"
我有一个名为 'run' 的 table 包含列
first second third
sad random "aa"
happy random1 "dd"
我必须 select 来自 'run' 的那些行,其中第三列包含列表 A 中的元素。我是 kdb 的新手,非常感谢任何有关如何执行此操作的帮助。谢谢
您需要关键字 in
,它允许您检查一个列表中的值是否出现在另一个列表中:
q)show A:("aa";"bb";"cc")
"aa"
"bb"
"cc"
q)show run:([]f:("sad";"happy");s:("random";"random1");t:("aa";"dd"))
f s t
----------------------
"sad" "random" "aa"
"happy" "random1" "dd"
q)select from run where t in A
f s t
-------------------
"sad" "random" "aa"
如果 A
是未加密的 table,那么您可以使用 A`cont
:
cont
q)show A:([]cont:("aa";"bb";"cc"))
cont
----
"aa"
"bb"
"cc"
q)select from run where t in A`cont
f s t
-------------------
"sad" "random" "aa"
当使用 in
时,输出是一个布尔列表,计数等于左侧参数的计数(在本例中为 1 2 3
):
q)1 2 3 in 2 4 6
010b
使用where
clause in the select
语句过滤返回的行。仅将 where
应用于布尔列表 returns 为真的索引:
q)where 1 2 3 in 2 4 6
,1
并且推而广之,table.
只会返回这些索引还应注意,尽管您提供的 table 只是一个示例,但它包含关键字 first
作为列 header。应尽可能避免使用 header 等关键字,因为它们会导致意外行为。