Выбор строк на основе содержимого столбца в списке в kdb
У меня есть список под названием "А", как:
cont
"aa"
"bb"
"cc"
У меня есть таблица под названием "Run", содержащая столбцы
first second third
sad random "aa"
happy random1 "dd"
Я должен выбрать те строки из 'run', где третий столбец содержит элементы в списке A. Я очень новичок в kdb, и любая помощь в том, как это сделать, приветствуется. Спасибо
1 ответ
Вам нужно ключевое слово 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
это таблица без ключей, то вы можете потянуть столбец cont
с помощью A`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
пункт в select
оператор фильтрует возвращаемые строки. применение where
в логический список возвращаются только те индексы, где он истинен:
q)where 1 2 3 in 2 4 6
,1
И, как следствие, только эти индексы будут возвращены из таблицы.
Следует также отметить, что, хотя предоставленная вами таблица является лишь примером, она содержит ключевое слово first
в качестве заголовка столбца. По возможности следует избегать использования ключевых слов в качестве заголовков, поскольку они могут вызвать неожиданное поведение.