折叠运算函数
概述
以下的折叠函数接受两个输入序列,即 left 和 right,并生成类型为 double 的结果序列,其中计算得出的标量结果为第一个元素。 这两个输入序列必须为相同类型。如果两个输入序列的长度不同,则操作仅在较短序列的元素数量上执行。 请使用以下表格中的链接获取有关这些函数的更详细说明:
| 函数 | 说明 |
|---|---|
| seq_wsum( left, right ) | 结果序列的第一个元素是两个序列:left 和 right 的加权和 |
| seq_wavg( left, right ) | 结果序列的第一个元素是两个序列:left 和 right 的加权平均值 |
| seq_cov( left, right ) | 结果序列的第一个元素是两个序列:left 和 right 的协方差 |
| seq_corr( left, right ) | 结果序列的第一个元素是两个序列:left 和 right 的相关系数 |
加权和和加权平均函数
seq_wsum()、seq_wavg() 函数接受两个类型为 double 的序列参数,并返回一个类型为 double 的标量结果。加权求和函数 seq_wsum() 计算两个序列元素乘积的总和。实际上,seq_wsum() 等同于:seq_sum(seq_mul()) 。
加权平均函数 seq_wavg() 计算平均值的方式是将两个序列元素的乘积之和除以序列 1 的和。这等同于由 seq_wsum() 返回的序列除以序列 1 的 seq_sum()。
以下是一个示例脚本,演示了 seq_wsum() 和 seq_wavg() 函数:
INSERT INTO SimpleSequence(testNumber,dVal1,dVal2)
VALUES(5,'{2,3,4}','{1,2,4}');
SELECT dVal1,dVal2,seq_wsum(dVal1,dVal2) AS "wsum" FROM SimpleSequence WHERE testNumber=5;
SELECT dVal1,dVal2,seq_wavg(dVal1,dVal2) AS "wavg" FROM SimpleSequence WHERE testNumber=5;
dVal1{}
dVal2{}
wsum
-------------------------------------------------------------------------
{2.000000, 3.000000, 4.000000}
{1.000000, 2.000000, 4.000000}
24.000000
dVal1{}
dVal2{}
wavg
-------------------------------------------------------------------------
{2.000000, 3.000000, 4.000000}
{1.000000, 2.000000, 4.000000}
2.666667对于上述数据集,加权总和的计算方法如下:
| 值 | 权重 | 积 |
|---|---|---|
| 2.00 | 1.00 | 2.00 |
| 3.00 | 2.00 | 6.00 |
| 4.00 | 4.00 | 16.00 |
| wsum | 24.00 |
上述数据集的加权平均值计算如下:
| 值 | 权重 | 积 |
|---|---|---|
| 2.00 | 1.00 | 2.00 |
| 3.00 | 2.00 | 6.00 |
| 4.00 | 4.00 | 16.00 |
| wsum | (= 2+6+16) | 24.00 |
| sum1 | (= 2+3+4) | 9.00 |
| wavg | (= 24/9) | 2.666667 |
协方差和相关性函数
标准统计函数 seq_cov() 和 seq_corr() 计算出一个表示两个序列之间相关性强度的双精度标量结果。协方差结果为 0 表示两个序列之间不存在相关性;如果 seq_cov() 返回正值(如上例所示),则表示序列 2 随序列 1 的增加而增加;负值则表示序列 2 随序列 1 的增加而减少。
同样,相关性结果为 0 表明这两个序列完全不相关;如果 seq_corr() 返回正值(如上例所示),则表明序列 2 随序列 1 的增加而增加;负值则表明序列 2 随序列 1 的增加而减少。seq_corr() 的结果值将在 -1 到 1 之间;值为 1 或 -1 表明这两个序列完全相关。
以下是一个示例脚本,演示了 seq_cov() 和 seq_corr() 函数:
INSERT INTO SimpleSequence(testNumber,dVal1,dVal2)
VALUES(6,'{2,3,5,7}','{3,3,5,9}');
SELECT dVal1,dVal2,seq_cov(dVal1,dVal2) AS "cov" FROM SimpleSequence WHERE testNumber=6;
SELECT dVal1,dVal2,seq_corr(dVal1,dVal2) AS "corr" FROM SimpleSequence WHERE testNumber=6;
dVal1{}
dVal2{}
cov
------------------------------------------------------------------------------
{2.000000, 3.000000, 5.000000, 7.000000}
{3.000000, 3.000000, 5.000000, 9.000000}
4.500000
dVal1{}
dVal2{}
corr
------------------------------------------------------------------------------
{2.000000, 3.000000, 5.000000, 7.000000}
{3.000000, 3.000000, 5.000000, 9.000000}
0.956689示例
以下是一个展示折叠功能的示例代码片段:
-- seq_wsum, seq_wavg
INSERT INTO SimpleSequence(testNumber,dVal1,dVal2)
VALUES(5,'{2,3,4}','{1,2,4}');
SELECT dVal1,dVal2,seq_wsum(dVal1,dVal2) AS "wsum" FROM SimpleSequence WHERE testNumber=5;
SELECT dVal1,dVal2,seq_wavg(dVal1,dVal2) AS "wavg" FROM SimpleSequence WHERE testNumber=5;
dVal1{}
dVal2{}
wsum
-------------------------------------------------------------------------
{2.000000, 3.000000, 4.000000}
{1.000000, 2.000000, 4.000000}
24.000000
dVal1{}
dVal2{}
wavg
-------------------------------------------------------------------------
{2.000000, 3.000000, 4.000000}
{1.000000, 2.000000, 4.000000}
2.666667
-- seq_cov, seq_corr
INSERT INTO SimpleSequence(testNumber,dVal1,dVal2)
VALUES(6,'{2,3,5,7}','{3,3,5,9}');
SELECT dVal1,dVal2,seq_cov(dVal1,dVal2) AS "cov" FROM SimpleSequence WHERE testNumber=6;
SELECT dVal1,dVal2,seq_corr(dVal1,dVal2) AS "corr" FROM SimpleSequence WHERE testNumber=6;
dVal1{}
dVal2{}
cov
------------------------------------------------------------------------------
{2.000000, 3.000000, 5.000000, 7.000000}
{3.000000, 3.000000, 5.000000, 9.000000}
4.500000
dVal1{}
dVal2{}
corr
------------------------------------------------------------------------------
{2.000000, 3.000000, 5.000000, 7.000000}
{3.000000, 3.000000, 5.000000, 9.000000}
0.956689示例脚本
可以在 samples/xsql/scripts/financial 目录中使用以下命令运行此 select 语句的示例脚本:
f 3