# TS-SQL / 聚集函数 ## `correlOf(expression_1, expression_2, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算两个表达式的相关系数 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression_1` | t_expression | 第一个数值表达式,可使用 `DISTINCT` 去重 | | `expression_2` | t_expression | 第二个数值表达式 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算两列数据的相关系数 ```tsl rows := array( ("X": 1, "Y": 2), ("X": 2, "Y": 4), ("X": 3, "Y": 5), ("X": 4, "Y": 8) ); return vselect correlOf(["Y"], ["X"]) from rows end; // 输出:0.981155781039212 ``` ## `covOf(expression_1, expression_2, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算两个表达式的协方差 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression_1` | t_expression | 第一个数值表达式,可使用 `DISTINCT` 去重 | | `expression_2` | t_expression | 第二个数值表达式 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算两列数据的协方差 ```tsl rows := array( ("X": 1, "Y": 2), ("X": 2, "Y": 4), ("X": 3, "Y": 5), ("X": 4, "Y": 8) ); return vselect covOf(["Y"], ["X"]) from rows end; // 输出:2.375 ``` ## `interceptOf(expression_1, expression_2, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算以第一个表达式为因变量、第二个表达式为自变量的线性回归截距 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression_1` | t_expression | 因变量表达式,可使用 `DISTINCT` 去重 | | `expression_2` | t_expression | 自变量表达式 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算线性回归截距 ```tsl rows := array( ("X": 1, "Y": 2), ("X": 2, "Y": 4), ("X": 3, "Y": 5), ("X": 4, "Y": 8) ); return vselect interceptOf(["Y"], ["X"]) from rows end; // 输出:0 ``` ## `percentRankOf(expression, x, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算指定值在数值集合中的百分比排位,最小值为 `0`,最大值为 `1` | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 数值表达式,可使用 `DISTINCT` 去重 | | `x` | real | 要计算排位的数值 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算数值的百分比排位 ```tsl rows := array(10, 6, 2, 1, 9); return vselect percentRankOf(thisRow, 2) from rows end; // 输出:0.25 ``` ## `rsqOf(expression_1, expression_2, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算两个表达式的乘积矩相关系数平方 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression_1` | t_expression | 第一个数值表达式,可使用 `DISTINCT` 去重 | | `expression_2` | t_expression | 第二个数值表达式 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算乘积矩相关系数平方 ```tsl rows := array( ("X": 1, "Y": 2), ("X": 2, "Y": 4), ("X": 3, "Y": 5), ("X": 4, "Y": 8) ); return vselect rsqOf(["Y"], ["X"]) from rows end; // 输出:0.962666666666667 ``` ## `skewOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的样本偏度,空值不参与统计 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 数值表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算样本偏度 ```tsl rows := array(("A": 5), ("A": 5), ("A": 9), ("A": 7)); return vselect skewOf(["A"]) from rows end; // 输出:0.854563038327971 ``` ## `slopeAndInterceptOf(expression_1, expression_2, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算线性回归斜率和截距,返回数组依次包含斜率与截距 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression_1` | t_expression | 因变量表达式,可使用 `DISTINCT` 去重 | | `expression_2` | t_expression | 自变量表达式 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:array ### 示例 范例01:计算线性回归斜率和截距 ```tsl rows := array( ("X": 1, "Y": 2), ("X": 2, "Y": 4), ("X": 3, "Y": 5), ("X": 4, "Y": 8) ); return vselect slopeAndInterceptOf(["Y"], ["X"]) from rows end; // 输出:array(1.9,0.0) ``` ## `slopeOf(expression_1, expression_2, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算以第一个表达式为因变量、第二个表达式为自变量的线性回归斜率 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression_1` | t_expression | 因变量表达式,可使用 `DISTINCT` 去重 | | `expression_2` | t_expression | 自变量表达式 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算线性回归斜率 ```tsl rows := array( ("X": 1, "Y": 2), ("X": 2, "Y": 4), ("X": 3, "Y": 5), ("X": 4, "Y": 8) ); return vselect slopeOf(["Y"], ["X"]) from rows end; // 输出:1.9 ``` ## `steyxOf(expression_1, expression_2, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算线性回归预测值的标准误差 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression_1` | t_expression | 因变量表达式,可使用 `DISTINCT` 去重 | | `expression_2` | t_expression | 自变量表达式 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算线性回归标准误差 ```tsl rows := array( ("X": 1, "Y": 2), ("X": 2, "Y": 4), ("X": 3, "Y": 5), ("X": 4, "Y": 8) ); return vselect steyxOf(["Y"], ["X"]) from rows end; // 输出:0.591607978309961 ``` ## `checksumOf(expression, ...)` 声明:function 计算当前行一个或多个表达式的校验值,表达式顺序会影响结果 | 参数 | 类型 | 说明 | | ------------ | ------------ | ----------------------------------------------------- | | `expression` | t_expression | 第一个参与校验的表达式,使用 `*` 时包含当前行全部字段 | | `...` | t_expression | 可选。继续参与校验的表达式 | 返回:integer ### 示例 范例01:计算两列组成的行校验值 ```tsl rows := array(("A": 1, "B": 2), ("A": 3, "B": 4)); result := vselect checksumOf(["A"], ["B"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:1945464334 ``` ## `countOf(expression)` 声明:function 统计当前组中表达式的非空值数量,省略表达式时统计全部行 | 参数 | 类型 | 说明 | | ------------ | ------------ | ------------------------------------------------- | | `expression` | t_expression | 可选。要统计的表达式,省略或使用 `*` 时统计全部行 | 返回:integer ### 示例 范例01:统计非空值数量 ```tsl rows := array( ("A": 1, "B": 2, "C": 7), ("A": nil, "B": 3, "C": 12), ("A": 4, "B": 20, "C": 34) ); result := vselect countOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:2 ``` ## `refOf(expression, n, bool_condition_exp)` 声明:function 返回当前行之前或之后指定位置的表达式值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ------------------------------------------------------ | | `expression` | t_expression | 要引用的表达式 | | `n` | integer | 相对当前行的偏移量,正数向前,负数向后,`0` 表示当前行 | | `bool_condition_exp` | t_expression | 可选。只在条件为真的行中计算相对位置 | 返回:any ### 示例 范例01:按条件引用前两行的值 ```tsl rows := array( ("A": 5, "B": 1, "C": 34), ("A": 6, "B": 2, "C": 34), ("A": 3, "B": 4, "C": 34), ("A": 2, "B": 2, "C": 34), ("A": 7, "B": 8, "C": 34), ("A": -1, "B": 59, "C": 34), ("A": 1, "B": 18, "C": 34), ("A": 9, "B": 1, "C": 34), ("A": 2, "B": 0, "C": 34), ("A": 4, "B": 18, "C": 34) ); result := select ["A"], refOf(["A"], 2, ["A"] > 2) as "refA" from rows end; echo trim(toStn(result)), "\n"; // 输出: // array( // ("A":5,"refA":0), // ("A":6,"refA":0), // ("A":3,"refA":5), // ("A":2,"refA":6), // ("A":7,"refA":6), // ("A":-1,"refA":3), // ("A":1,"refA":3), // ("A":9,"refA":3), // ("A":2,"refA":7), // ("A":4,"refA":7)) ``` ## `countIfOf(expression, n, moving_first, cache_id)` 声明:function 统计当前组中表达式为真的行数 | 参数 | 类型 | 说明 | | -------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 要统计的布尔表达式 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。保留参数,当前不影响统计方式 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:integer ### 示例 范例01:统计大于指定值的行数 ```tsl rows := array( ("A": 6, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 2, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect countIfOf(["A"] > 4) from rows end; echo trim(toStn(result)), "\n"; // 输出:4 ``` ## `avgOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的算术平均值,空值不参与统计 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算去重后的算术平均值 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect avgOf(distinct ["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:6.0 ``` ## `emaOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的指数移动平均值,不支持空值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ----------------------------------------- | | `expression` | t_expression | 参与计算的数值表达式 | | `bool_condition_exp` | t_expression | 用于筛选参与计算行的布尔表达式 | | `n` | integer | 指数移动平均周期 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算两期指数移动平均值 ```tsl rows := array( ("A": 6, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 2, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := select emaOf(["A"], true, 2) from rows end; echo trim(toStn(result)), "\n"; // 输出: // array( // ("Expr1":6.0), // ("Expr1":5.33333333333333), // ("Expr1":7.77777777777778), // ("Expr1":3.92592592592593), // ("Expr1":5.97530864197531)) ``` ## `smaOf(expression, m, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的平滑移动平均值,不支持空值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ----------------------------------------- | | `expression` | t_expression | 参与计算的数值表达式 | | `m` | integer | 平滑权重参数 | | `bool_condition_exp` | t_expression | 用于筛选参与计算行的布尔表达式 | | `n` | integer | 平滑移动平均周期 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算三期平滑移动平均值 ```tsl rows := array( ("A": 6, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 2, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := select smaOf(["A"], 2, true, 3) from rows end; echo trim(toStn(result)), "\n"; // 输出: // array( // ("Expr1":6.0), // ("Expr1":5.33333333333333), // ("Expr1":7.77777777777778), // ("Expr1":3.92592592592593), // ("Expr1":5.97530864197531)) ``` ## `harMeanOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的调和平均值,空值不参与统计 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算去重后的调和平均值 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect harMeanOf(distinct ["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:5.83333333333333 ``` ## `geoMeanOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的几何平均值,空值不参与统计 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算去重后的几何平均值 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect geoMeanOf(distinct ["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:5.91607978309962 ``` ## `sumOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的总和,空值不参与统计 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算去重后的总和 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect sumOf(distinct ["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:12.0 ``` ## `minOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 返回数值表达式的最小值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:返回满足条件的最小值 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect minOf(["A"], ["A"] > 6) from rows end; echo trim(toStn(result)), "\n"; // 输出:7.0 ``` ## `maxOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 返回数值表达式的最大值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:返回满足条件的最大值 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect maxOf(["A"], ["A"] > 6) from rows end; echo trim(toStn(result)), "\n"; // 输出:9.0 ``` ## `refMinOf(expression, id_string)` 声明:function 返回 `minOf` 最小值所在行的另一个表达式值 | 参数 | 类型 | 说明 | | ------------ | ------------ | --------------------------------- | | `expression` | t_expression | 要从最小值所在行读取的表达式 | | `id_string` | string | 可选。对应 `minOf` 使用的缓存标识 | 返回:any ### 示例 范例01:读取两列最小值所在行的关联值 ```tsl rows := array( ("A": 6, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 2, "C": 34), ("A": 2, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := select minOf(["A"], true, nil, true, ""), minOf(["B"], true, nil, true, ""), refMinOf(["B"], "minA"), refMinOf(["A"], "minB") from rows end; echo trim(toStn(result)), "\n"; // 输出: // array( // ("Expr1":2.0,"Expr2":2.0,"Expr3":20,"Expr4":9)) ``` ## `refMaxOf(expression, id_string)` 声明:function 返回 `maxOf` 最大值所在行的另一个表达式值 | 参数 | 类型 | 说明 | | ------------ | ------------ | --------------------------------- | | `expression` | t_expression | 要从最大值所在行读取的表达式 | | `id_string` | string | 可选。对应 `maxOf` 使用的缓存标识 | 返回:any ### 示例 范例01:读取两列最大值所在行的关联值 ```tsl rows := array( ("A": 6, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 2, "C": 34), ("A": 2, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := select maxOf(["A"], true, nil, true, ""), maxOf(["B"], true, nil, true, ""), refMaxOf(["B"], "maxA"), refMaxOf(["A"], "maxB") from rows end; echo trim(toStn(result)), "\n"; // 输出: // array( // ("Expr1":9.0,"Expr2":20.0,"Expr3":2,"Expr4":6)) ``` ## `modeOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 返回数值表达式中出现频率最高的值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算众数 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect modeOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:5.0 ``` ## `medianOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 返回数值表达式的中位数,偶数个值时返回中间两值的平均值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算中位数 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect medianOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:6.0 ``` ## `stdevOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的样本标准差,空值不参与统计 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算样本标准差 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect stdevOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:1.91485421551268 ``` ## `stdevpOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的总体标准差,空值不参与统计 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算总体标准差 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect stdevpOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:1.6583123951777 ``` ## `varOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的样本方差,空值不参与统计 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算样本方差 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect varOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:3.66666666666667 ``` ## `varpOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式的总体方差,空值不参与统计 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算总体方差 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect varpOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:2.75 ``` ## `totalVarOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式各值与均值之差的平方和 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算总方差 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect totalVarOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:11.0 ``` ## `aveDevOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式各值与均值之差的绝对值平均数 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算平均绝对偏差 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect aveDevOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:1.5 ``` ## `devSqOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式各值与均值之差的平方和 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算偏差平方和 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect devSqOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:11.0 ``` ## `normOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式平方和的平方根 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算二范数 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect normOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:13.4164078649987 ``` ## `skew2Of(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算与矩阵算法兼容的总体偏度 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算总体偏度 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect skew2Of(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:0.493382200218159 ``` ## `kurtosisOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算与表格算法兼容的总体峰度 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算表格算法峰度 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect kurtosisOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:-1.28925619834711 ``` ## `kurtosis2Of(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算与矩阵算法兼容的总体峰度 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算矩阵算法峰度 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect kurtosis2Of(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:1.62809917355372 ``` ## `largeOf(expression, k, bool_condition_exp, n, moving_first, cache_id)` 声明:function 返回数值表达式中第 `k` 个最大值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与排序的数值表达式 | | `k` | integer | 从大到小的序号,从 `1` 开始 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:返回第二大值 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect largeOf(["A"], 2) from rows end; echo trim(toStn(result)), "\n"; // 输出:7.0 ``` ## `smallOf(expression, k, bool_condition_exp, n, moving_first, cache_id)` 声明:function 返回数值表达式中第 `k` 个最小值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与排序的数值表达式 | | `k` | integer | 从小到大的序号,从 `1` 开始 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:返回第二小值 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect smallOf(["A"], 2) from rows end; echo trim(toStn(result)), "\n"; // 输出:5.0 ``` ## `percentileOf(expression, k, bool_condition_exp, n, moving_first, cache_id)` 声明:function 返回数值表达式指定百分位位置的值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与计算的数值表达式 | | `k` | real | 百分位位置,取值范围为 `0` 到 `1` | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算三分之一分位值 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect percentileOf(["A"], 1 / 3) from rows end; echo trim(toStn(result)), "\n"; // 输出:5.0 ``` ## `quartileOf(expression, k, bool_condition_exp, n, moving_first, cache_id)` 声明:function 返回数值表达式指定四分位位置的值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与计算的数值表达式 | | `k` | integer | 四分位位置,取值为 `0` 到 `4` | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:返回最小四分位值 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect quartileOf(["A"], 0) from rows end; echo trim(toStn(result)), "\n"; // 输出:5.0 ``` ## `rankOf(expression, x, bool_condition_exp, n, moving_first, cache_id)` 声明:function 返回指定数值在表达式结果中按从大到小排列的名次 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与排序的数值表达式 | | `x` | real | 要计算排位的数值 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算指定值的降序名次 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect rankOf(["A"], 7) from rows end; echo trim(toStn(result)), "\n"; // 输出:2 ``` ## `trimMeanOf(expression, k, bool_condition_exp, n, moving_first, cache_id)` 声明:function 从数值表达式两端剔除指定比例的数据后计算平均值 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与计算的数值表达式 | | `k` | real | 从首尾剔除的数据比例 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算截尾平均值 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect trimMeanOf(["A"], 0.2) from rows end; echo trim(toStn(result)), "\n"; // 输出:6.5 ``` ## `frequencyOf(expression, calc_array, bool_condition_exp, n, moving_first, cache_id)` 声明:function 统计数值表达式落入各区间的频数 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与分组的数值表达式 | | `calc_array` | array | 按升序给出的区间上界数组 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:array ### 示例 范例01:按一个区间上界统计频数 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect frequencyOf(["A"], array(6)) from rows end; echo trim(toStn(result)), "\n"; // 输出:array(2,2) ``` ## `productOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式中全部值的乘积 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:real ### 示例 范例01:计算全部值的乘积 ```tsl rows := array( ("A": 5, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect productOf(["A"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:1575.0 ``` ## `checksum_aggOf(expression, bool_condition_exp, n, moving_first, cache_id)` 声明:function 计算数值表达式全部值的聚集校验和 | 参数 | 类型 | 说明 | | -------------------- | ------------ | ---------------------------------------------------- | | `expression` | t_expression | 参与统计的表达式,可使用 `DISTINCT` 去重 | | `bool_condition_exp` | t_expression | 可选。只统计条件为真的行 | | `n` | integer | 可选。相对当前行参与统计的记录数,负数表示向后取记录 | | `moving_first` | bool | 可选。是否先限定最近 `n` 条记录再应用条件 | | `cache_id` | string | 可选。时间序列统计缓存标识 | 返回:integer ### 示例 范例01:计算一列的聚集校验和 ```tsl rows := array( ("A": 6, "B": 20, "C": 34), ("A": 5, "B": 20, "C": 34), ("A": 9, "B": 2, "C": 34), ("A": 2, "B": 20, "C": 34), ("A": 7, "B": 18, "C": 34) ); result := vselect checksum_aggOf(["C"]) from rows end; echo trim(toStn(result)), "\n"; // 输出:1849359852 ```