kdb - 动态构建表达式的问题
问题描述
我正在尝试构建一个通用查询,我不知道表的名称和列数。所以假设我有一张桌子,例如:
r:([] a:til 5; b:til 5; c:til 5);
我想建立一个查询来计算平均值的差异:
c:cols[r] except `date;
select a, b, c, a_dm:(a - avg a) , b_dm:(b - avg b), c_dm:(c - avg c)from r;
所以我的理解是我应该使用函数形式,即:
?[r;();0b;`a`b`c`a_dm`b_dm`c_dm!(`a;`b;`c;(-;`a;(avg;`a));(-;`b;(avg;`b));(-;`c;(avg;`c)))]
因为我不知道我会收到哪个表,也不知道它的列名,所以我需要一些通用的东西,所以我尝试了以下几行:
dmk:`$(string c),\:"_dm";
k:c,dmk;
dmv:raze "(-;",/:("`",/:string c),/'";(avg;",/:("`",/:string c),\:"));"
parse dmv
count dmv
v:c,parse dmv
dic:k!v
?[r;();0b;dic]
我猜这不起作用,因为我的 dmv 不正常。
我完全不清楚如何解决它。如果有人可以请给我一些指示,将不胜感激。
解决方案
尽管列顺序并不完全相同,但您可以尝试以下操作:
q)f:{(x,`$string[x],"_dm")!(x;(-;x;(avg;x)))}
q)
q)?[r;();0b;raze f each cols r]
a a_dm b b_dm c c_dm
--------------------
0 -2 0 -2 0 -2
1 -1 1 -1 1 -1
2 0 2 0 2 0
3 1 3 1 3 1
4 2 4 2 4 2
创建一个创建每列 where 子句字典的函数,然后应用于所有列
推荐阅读
- c# - 类库中的 asp.net core ef dbcontext
- ruby - 从保留重音字符的字符串中删除非字母数字字符
- r - R Shiny CRUD 应用程序上的单选按钮问题
- python-3.x - Pandas 发送包含数据框的电子邮件作为可视化表格
- blockchain - Web3js 与没有元掩码的本地松露进行交互
- google-maps - 折线谷歌地图android中两条路径之间的航路点?
- javascript - service-worker.js中未添加的.html页面被缓存,可以离线使用?
- javascript - JSON 休息服务转 HTML 表格格式
- axon - 如何在微服务系统中使用 axon 和 Spring Cloud
- javascript - 基于先前值自动添加值的 JavaScript 循环