aggrTopN

语法

aggrTopN(func, funcArgs, sortingCol, top, [ascending=true])

参数

func 必须是一个聚合函数。

funcArgsfunc 的参数,可以是标量或向量。 func 有多个参数时,它是一个元组。

sortingCol 是一个数值类型或时间类型的向量,提供 funcArgs 的排序指标。

top 可以是整数或者浮点数。

  • 如果是整数,表示选取的前 top 行数据;

  • 如果是浮点数,表示百分比,必须小于1.0。根据 funcArgs 的总行数 top 来确定需要选取的行数。若结果不是整数,则向下取整,至少取一行。

ascending 是一个布尔值,表示是否按升序排序。 默认值是 true。

其他相关 TopN 系列函数参数说明和窗口计算规则请参考: TopN 系列

详情

sortingCol 根据 ascending 指定方式进行排序后,得到 funcArgs 中对应的前 top 个元素,使用 func 指定的聚合函数进行计算。sortingCol 包含的 NULL 值当作最小值处理。

首发版本

1.30.16、2.00.4

例子

$ aggrTopN(func=sum, funcArgs=1 2 3 4 5, sortingCol=5 1 2 3 4, top=3, ascending=false)
10

$ aggrTopN(func=corr,funcArgs=[1..5, 3 9 4 2 5], sortingCol=2 3 4 5 3, top=3)
0.052414

top =3,aggrTopN严格取前3个元素进行计算,下例中有3个3对应第三位,只取满足 top 数量的值进行计算

$ aggrTopN(func=min,funcArgs=1 6 4 -6 4 5, sortingCol=2 3 3 3 4 5, top=3)
1

计算每个股票每天最大交易量前25%的交易平均价格。

$ t = table(`A`A`A`B`B`B`B`B`B`B`B as sym, 09:30:06 09:30:28 09:31:46 09:31:59 09:30:19 09:30:43 09:31:23 09:31:56 09:30:44 09:31:25 09:31:57 as time, 10 20 10 30 20 40 30 30 30 20 40 as volume, 10.05 10.06 10.07 10.05 20.12 20.13 20.14 20.15 20.12 20.13 20.16 as price);
$ t;

sym

time

volume

price

A

09:30:06

10

10.05

A

09:30:28

20

10.06

A

09:31:46

10

10.07

B

09:31:59

30

10.05

B

09:30:19

20

20.12

B

09:30:43

40

20.13

B

09:31:23

30

20.14

B

09:31:56

30

20.15

B

09:30:44

30

20.12

B

09:31:25

20

20.13

B

09:31:57

40

20.16

$ select aggrTopN(func=avg, funcArgs=price, sortingCol=volume, top=0.25, ascending=false) from t group by sym, time

sym

time

aggrTopN_avg

A

09:30:06

10.05

A

09:30:28

10.06

A

09:31:46

10.07

B

09:30:19

20.12

B

09:30:43

20.13

B

09:30:44

20.12

B

09:31:23

20.14

B

09:31:25

20.13

B

09:31:56

20.15

B

09:31:57

20.16

B

09:31:59

10.05