首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接使用场景

连接使用场景
EN

Stack Overflow用户
提问于 2020-06-01 04:48:27
回答 1查看 87关注 0票数 0

官方的docs只涵盖了join的基本用法。但是可以看到left join lj是如何实现的:

代码语言:javascript
复制
q)lj
k){.Q.ft[,\:[;y];x]}
q).Q.ft
k){$[$[99h=@t:v y;98h=@. t;0];[n:#+!y;n!x 0!y];x y]}

因此,您可以找到另一个用例(dict,keyed table)

代码语言:javascript
复制
/(dict,dict): add columns
d1:     `a`b  ! 1 2
d2:       `b`c!   3 4
(d1,d2)~`a`b`c! 1 3 4

/(table,table): add rows
t1:(enlist `a`b!1 2)
t2:(enlist `a`b!3 4)
(t1,t2) ~ (`a`b!1 2;`a`b!3 4)

/(keyed table,keyed table): add rows
k1:(`a`b!1 2;`a`b!3 5)!(`c`d`e!10 20 30;`c`d`e!40 50 60)
k2:(`a`b!1 2;`a`b!3 4)!(`c`d`e!15 25 35;`c`d`e!45 55 65)
(k1,k2)
/ a b| c  d  e
/ ---| --------
/ 1 2| 15 25 35
/ 3 5| 40 50 60
/ 3 4| 45 55 65

/(dict,keyed table): add cols
k2:(`a`b!1 2;`a`b!3 4)!(`c`d`e!15 25 35;`c`d`e!45 55 65)
/                  a b| c  d  e
/                  ---| --------
d1:     `a`b`c`d  !1 2  10 20
/                  1 2| 15 25 35
/                  3 4| 45 55 65
(d1,k2)~`a`b`c`d`e!1 2  15 25 35

此外,文档中还提到了,\:,'的情况。但是,将表伪装成字典列表,它们只是上述列表的派生形式。

问题是--这个强大的函数join ,是否还有其他用例(具有不同的参数类型

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-25 21:06:13

您已经介绍了q中的主要数据结构,尽管我认为另一种可能对新用户来说最初不明显的方式是,给定函数是q中的第一类对象,您可以在它们上使用join,这对于创建解析树很有用。

例如,

代码语言:javascript
复制
t:([]col1:10?10;col2:10?10;col3:10?10)

假设您正在处理一个函数式查询,并且希望分别选择col1和col2的和,您可以这样写

代码语言:javascript
复制
?[t;();0b;`col1`col2!((sum;`col1);(sum;`col2))]

虽然稍微更紧凑,但包含的列越多,它就会变得越紧凑。

代码语言:javascript
复制
?[t;();0b;`col1`col2!sum,/:`col1`col2]

下面是Shorter,但不是因为使用了joins

代码语言:javascript
复制
?[t;();0b;{x!sum,/:x}`col1`col2]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62122293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档