выберите запрос с условием where, используя переменные вместо имен столбцов в q kdb - PullRequest
0 голосов
/ 14 мая 2019

У меня есть таблица со столбцами sym, размер px

t:([] sym:`GOOG`IBM`APPL; px:10 20 30; size:1000 2000 3000)

Теперь, если я назначу столбец sym переменной ab

ab:`sym

Тогда выполнение нижеприведенного запроса не дает правильного вывода

select [ab],px from t where [ab]=`IBM / returns empty table
?[t;(=;`sym;`IBM);0b; [ab]`px![ab]`px]/ type

Понял здесь и здесь , но не смог создать рабочий запрос.

1 Ответ

3 голосов
/ 14 мая 2019

Ответ выше близок, но есть несколько вещей, которые следует учитывать.Запрос, который вы выполняете, в основном:

q)parse"select sym,px from t where sym=`IBM"
?
`t
,,(=;`sym;,`IBM)
0b
`sym`px!`sym`px

Ключевым моментом здесь является то, что , обычно указывает, что термин нуждается в зачислении.Кроме того, для словаря имен столбцов вам просто нужно присоединить значение от ab до px.Имея все это в виду, я изменил ваш запрос выше:

q)?[t;enlist(=;`sym;enlist`IBM);0b;(ab,`px)!ab,`px]
sym px
------
IBM 20

И предполагая, что предложение where также должно ссылаться на ab:

q)?[t;enlist(=;ab;enlist`IBM);0b;(ab,`px)!ab,`px]
sym px
------
IBM 20
...