contextby
语法
contextby(func, funcArgs, groupingCol,
[sortingCol])
或
funcArg func:X groupingCol
或
func:X(funcArgs, groupingCol, [sortingCol])
参数
-
func 是一个函数。注意:对于第二种用法,func表示的函数只能有一个参数。
-
funcArgs 是函数func的参数。如果有多个参数,则用元组表示。
-
groupingCol 是分组变量,可为一组或多组。
-
sortingCol 是可选参数,表示在应用函数func前,依此列进行组内排序。
funcArgs, groupingCol和sortingCol中包含的向量长度相等。
详情
根据groupingCol分组,并在组内进行指定计算。返回一个与输入参数长度相同的向量。
如果func是聚合函数,每组内的所有结果相同。若指定了sortingCol,在计算前,依此列进行组内排序。
例子
sym=`IBM`IBM`IBM`MS`MS`MS
price=172.12 170.32 175.25 26.46 31.45 29.43
qty=5800 700 9000 6300 2100 5300
trade_date=2013.05.08 2013.05.06 2013.05.07 2013.05.08 2013.05.06 2013.05.07;
contextby(avg, price, sym);
输出返回:[172.563,172.563,172.563,29.113,29.113,29.113]
price avg :X sym;
输出返回:[172.563,172.563,172.563,29.113,29.113,29.113]
price at price>contextby(avg, price,sym);
输出返回:[175.25,31.45,29.43]
price at price>price avg :X sym;
输出返回:[175.25,31.45,29.43]
sym at price>contextby(avg, price,sym);
输出返回:["IBM","MS","MS"]
contextby(wavg, [price, qty], sym);
输出返回:[173.856,173.856,173.856,28.374,28.374,28.374]
// 计算数量加权的平均值
contextby(ratios, price, sym, trade_date) - 1;
输出返回:[-0.01786,,0.028946,-0.100917,,-0.064229]
groupingCol 可包含多个向量:
sym=`IBM`IBM`IBM`IBM`IBM`IBM`MS`MS`MS`MS`MS`MS
date=2020.12.01 + 0 0 0 1 1 1 0 0 0 1 1 1
qty=5800 700 9000 1000 3500 3900 6300 2100 5300 7800 1200 4300
contextby(cumsum, qty, [sym,date]);
输出返回:[5800,6500,15500,1000,4500,8400,6300,8400,13700,7800,9000,13300]
contextby 高阶函数可在 SQL 查询中使用:
t1=table(trade_date,sym,qty,price);
t1;
输出返回:
trade_date | sym | qty | price |
---|---|---|---|
2013.05.08 | IBM | 5800 | 172.12 |
2013.05.06 | IBM | 700 | 170.32 |
2013.05.07 | IBM | 9000 | 175.25 |
2013.05.08 | MS | 6300 | 26.46 |
2013.05.06 | MS | 2100 | 31.45 |
2013.05.07 | MS | 5300 | 29.43 |
// 选出价格高于组内平均价的交易记录
select trade_date, sym, qty, price from t1 where price > contextby(avg, price,sym);
输出返回:
trade_date | sym | qty | price |
---|---|---|---|
2013.05.07 | IBM | 9000 | 175.25 |
2013.05.06 | MS | 2100 | 31.45 |
2013.05.07 | MS | 5300 | 29.43 |