我有一个表,我必须在动态列上执行 group by 并执行聚合,结果将是列值连接 group-by 表和用户提供的 col 聚合。
例如 :
g1 g2 g3 g4 col1 col2
A D F H 10 20
A E G I 11 21
B D G J 12 22
B E F L 13 23
C D F M 14 24
C D G M 15 25
如果我需要按 g1、g2、g4 执行分组,col1 输出上的 avg 聚合应该是这样的
filed val
Avg[A-D-H-col1] 10.0
Avg[A-E-I-col1] 11.0
Avg[B-D-J-col1] 12.0
Avg[B-E-L-col1] 13.0
Avg[C-D-M-col1] 14.5
如果我的按列分组是使用 q-sql 修复的,我可以执行此操作
t:([]g1:`A`A`B`B`C`C;g2:`D`E`D`E`D`D;g3:`F`G`G`F`F`G;g4:`H`I`J`L`M`M;col1:10 11 12 13 14 15;col2:20 21 22 23 24 25)
select filed:first ("Avg[",/:(({"-" sv x} each string (g1,'g2,'g4)),\:"-col1]")),val: avg col1 by g1,g2,g4 from t
我想使用相同的功能查询,这意味着我想要一个函数,它采用按列分组的列表、要执行的聚合以及列名和表名作为输入和输出,就像上面的查询一样。我可以通过轻松使用动态列来执行分组,但不能在字段中进行组合。函数签名将是这样的
有趣{[glist; 聚合;col,t] .. ;... }[ g1
g2 g4;
avg; col1,
吨]
请帮助我将上述查询设为动态。