官方的docs只涵盖了join的基本用法。但是可以看到left join lj是如何实现的:
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)
/(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 ,是否还有其他用例(具有不同的参数类型
发布于 2020-06-25 21:06:13
您已经介绍了q中的主要数据结构,尽管我认为另一种可能对新用户来说最初不明显的方式是,给定函数是q中的第一类对象,您可以在它们上使用join,这对于创建解析树很有用。
例如,
t:([]col1:10?10;col2:10?10;col3:10?10)假设您正在处理一个函数式查询,并且希望分别选择col1和col2的和,您可以这样写
?[t;();0b;`col1`col2!((sum;`col1);(sum;`col2))]虽然稍微更紧凑,但包含的列越多,它就会变得越紧凑。
?[t;();0b;`col1`col2!sum,/:`col1`col2]下面是Shorter,但不是因为使用了joins
?[t;();0b;{x!sum,/:x}`col1`col2]https://stackoverflow.com/questions/62122293
复制相似问题