折叠运算函数
概述
以下的折叠函数接受两个输入序列,即 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