Выбор строк на основе содержимого столбца в списке в 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 в качестве заголовка столбца. По возможности следует избегать использования ключевых слов в качестве заголовков, поскольку они могут вызвать неожиданное поведение.

Другие вопросы по тегам