【问题标题】:select column from a table based on a variable name in q kdb根据 q kdb 中的变量名从表中选择列
【发布时间】:2019-05-13 10:27:55
【问题描述】:

我有一个包含 sym 和 px 列的表格

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

现在,如果我将 sym 列分配给变量 ab

ab:`sym

然后,在查询下方运行会给出排名错误

select ab from t / 'rank
select `ab from t / 'rank

我有一个要求,我需要根据条件将列名保存到变量中,然后对分配给变量的列运行选择查询。

关注了“Q for Mortals”和“参考卡”,但没有帮助。

【问题讨论】:

    标签: kdb


    【解决方案1】:

    有几种方法可以实现这一目标。如果表没有键,那么只需使用带有该列名的#(注意左边的参数必须是一个列表):

    enlist[ab]#t
    sym
    ----
    GOOG
    IBM
    APPL
    

    另一种方法是使用函数形式,例如:

    q)?[t;();0b;enlist[ab]!enlist ab]
    sym
    ----
    GOOG
    IBM
    APPL
    

    可以从解析树中得到这个查询的形式,例如:

    q)parse"select ab from t"
    ?
    `t
    ()
    0b
    (,`ab)!,`ab
    

    下面是函数式选择的一个更通用的函数:

    q){?[x;();0b;{x!x}(),y]}[t;ab]
    sym
    ----
    GOOG
    IBM
    APPL
    

    【讨论】:

    • 感谢托马斯的回答。如果我们想做“从 t 中选择 ab,px”怎么办?我尝试了函数形式,但惨遭失败。 ?[t;();0b;enlist[ab]px!enlist abpx]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多