如何在group by场景中使用多值函数

问题描述 投票:0回答:1

如果我将 GROUP BY 子句与自定义聚合函数一起使用,我的聚合函数将返回两个值。我尝试将 def 更改为 defg,但出现错误:“列 'high_low_ratio_mean' 必须使用聚合函数。RefId:S02022”

defg high_to_low_ratio(high,low){
    high_to_low = high\low-1
    Amp_Mean = avg(high_to_low)
    return high_to_low,Amp_Mean
}
select high_to_low_ratio(high, low) as `high_low_ratio_mean`Amp_Mean
from OneData
group by SecurityID
order by SecurityID;
group-by dolphindb
1个回答
0
投票

如果返回两个聚合值,可以参考以下脚本编写:

defg calc(x){
  return sum(x), avg(x)
}
select calc(close) as `sum`avg from t group by securityid

由于您要返回一个聚合结果和一个向量,因此需要使用 toArray 来聚合该向量,如下所示:

defg calc(high, low){
    hl = high\low - 1
    m = avg(hl)
    return hl, m
}
select toArray(calc(high, low)) as `hl`mean from t group by securityid

但是这样做也会将均值的聚合值转换为数组向量。在这种情况下,建议将向量和聚合度量分离到不同的函数中进行计算。

© www.soinside.com 2019 - 2024. All rights reserved.