累积聚合函数
概述
以下二元函数接受两个输入序列,即左序列和右序列,并生成相同类型的输出序列。 这两个输入序列必须是相同的类型。如果两个输入序列的长度不同,则操作仅在较短序列的元素数量范围内执行。
函数 | 说明 |
---|---|
seq_cum_agg_max(input) | 返回一个具有累积最大值的序列:每个元素都是所有前序元素中的最大值 |
seq_cum_agg_min(input) | 返回一个具有累积最小值的序列:每个元素都是所有前序元素中的最小值 |
seq_cum_agg_sum(input) | 返回一个具有累积和的序列:每个元素都是所有前序元素的和 |
seq_cum_agg_prd(input) | 返回一个具有累积乘积的序列:每个元素都是所有前序元素的乘积 |
seq_cum_agg_avg(input) | 返回一个具有累积平均值的序列:每个元素都是所有前序元素的平均值 |
seq_cum_agg_var(input) | 返回一个具有累积方差的序列:每个元素都是所有前序元素的方差 |
seq_cum_agg_var_samp(input) | 返回一个具有累积样本方差的序列:每个元素都是所有前序元素的累积样本方差 |
seq_cum_agg_dev_samp(input) | 返回一个序列,其中包含样本标准差:每个元素都是所有先前元素的累积样本标准差 |
seq_cum_agg_sum()、seq_cum_agg_min()、seq_cum_agg_prd()、seq_cum_agg_avg()、seq_cum_agg_var()、seq_cum_agg_dev() 函数会返回一个序列,其中每个元素都是其之前所有元素的最大值(最小值、乘积、平均值、方差、标准差等)。以下是一个展示这些功能的示例脚本:
SELECT symbol, seq_search(day, 20130101, 20130331) as Q1_13,
volume@Q1_13 as "Volume_Q1_13",
seq_cum_agg_max(volume@Q1_13) as "max_Q1_13",
seq_cum_agg_min(volume@Q1_13) as "min_Q1_13",
seq_cum_agg_sum(volume@Q1_13) as "sum_Q1_13",
seq_cum_agg_avg(volume@Q1_13) as "avg_Q1_13",
seq_cum_agg_var(volume@Q1_13) as "var_Q1_13",
seq_cum_agg_dev(volume@Q1_13) as "dev_Q1_13"
FROM Quote WHERE symbol='SYM0';
symbol
Q1_13{}
Volume_Q1_13{}
max_Q1_13{}
min_Q1_13{}
sum_Q1_13{}
prd_Q1_13{}
avg_Q1_13{}
var_Q1_13{}
dev_Q1_13{}
------------------------------------------------------------------------------
SYM0
{20130101, 20130104, 20130106, 20130110, 20130123, 20130125, 20130129,
20130213, 20130214, 20130216, 20130311, 20130326}
{335, 808, 45, 402, 732, 48, 805,
450, 385, 420, 367, 69}
{335, 808, 808, 808, 808, 808, 808,
808, 808, 808, 808, 808}
{335, 335, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45}
{335, 1143, 1188, 1590, 2322, 2370, 3175,
3625, 4010, 4430, 4797, 4866}
{335, 270680, 12180600, 4896601200, 3584312078400, 172046979763200, 138497818709376000,
6983786198090545152, -4466948496734652416, 5449526889820250112, 7728008603400216576,
-1722984502962053120}
{335.000000, 571.500000, 396.000000, 397.500000, 464.400000, 395.000000, 453.571429,
453.125000, 445.555556, 443.000000, 436.090909, 405.500000}
{0, 55932, 98888, 74173, 77241, 88449, 96397,
84349, 75435, 67950, 62250, 67356}
{0, 236, 314, 272, 277, 297, 310,
290, 274, 260, 249, 259}
Cum_Agg 函数结果序列中的每个元素都是该序列中所有先前元素的累积最大值、最小值、总和、乘积、平均值、方差或标准差。这些结果可以通过以下表格(使用 Microsoft Excel 2010 版本构建)进行验证:

请注意,seq_cum_agg_prd() 函数很快就会生成巨大的数字,结果序列可能会因溢出而包含错误的输出(请参见上面示例输出中的突出显示元素。)
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
g 10
示例
正如“分析函数库示例”页面中所解释的那样,以下示例中的数据取自 2013 年 IBM 的历史值。通过在 samples/xsql/scripts/financial 目录中运行各种脚本将数据加载到 xSQL 中。要重现以下示例,请运行 g.bat(在 Linux 系统上为 g.sh),并指定示例编号 10。例如,以 scripts/financial 作为当前工作目录,只需键入:
g 10
以下是一个示例代码片段,展示了 2013 年第一季度部分 cum_agg() 函数的用法。
-- Show Q1 Volumes
SELECT symbol, seq_search(day, 20130101, 20130331) as Q1_13,
volume@Q1_13 as "Volume_Q1_13"
FROM Quote WHERE symbol = 'SYM0';
symbol
Q1_13{}
Volume_Q1_13{}
-------------------------------------------------------------------------
SYM0
{20130101, 20130104, 20130106, 20130110, 20130123, ...<2 element(s)>...,
20130213, 20130214, 20130216, 20130311, 20130326}
{335, 808, 45, 402, 732, ...<2 element(s)>..., 450, 385, 420, 367, 69}
-- -- _max, _min, _sum, _prd, _avg, _var, _dev
SELECT symbol, seq_search(day, 20130101, 20130331) as Q1_13,
volume@Q1_13 as "Volume_Q1_13",
seq_cum_agg_max(volume@Q1_13) as "max_Q1_13",
seq_cum_agg_min(volume@Q1_13) as "min_Q1_13",
seq_cum_agg_sum(volume@Q1_13) as "sum_Q1_13",
seq_cum_agg_prd(volume@Q1_13) as "prd_Q1_13",
seq_cum_agg_avg(volume@Q1_13) as "avg_Q1_13",
seq_cum_agg_var(volume@Q1_13) as "var_Q1_13",
seq_cum_agg_dev(volume@Q1_13) as "dev_Q1_13"
FROM Quote WHERE symbol='SYM0';
symbol
Q1_13{}
Volume_Q1_13{}
max_Q1_13{}
min_Q1_13{}
sum_Q1_13{}
prd_Q1_13{}
avg_Q1_13{}
var_Q1_13{}
dev_Q1_13{}
-------------------------------------------------------------------------
SYM0
{20130101, 20130104, 20130106, 20130110, 20130123, ...<2 element(s)>...,
20130213, 20130214, 20130216, 20130311, 20130326}
{335, 808, 45, 402, 732, ...<2 element(s)>..., 450, 385, 420, 367, 69}
{335, 808, 808, 808, 808, ...<2 element(s)>..., 808, 808, 808, 808, 808}
{335, 335, 45, 45, 45, ...<2 element(s)>..., 45, 45, 45, 45, 45}
{335, 1143, 1188, 1590, 2322, ...<2 element(s)>..., 3625, 4010, 4430, 4797, 4866}
{335, 270680, 12180600, 4896601200, 3584312078400, ...<2 element(s)>...,
6983786198090545152, -4466948496734652416, 5449526889820250112, 7728008603400216576, -1722984502962053120}
{335, 492.666666666667, 380.75, 385, 442.833333333333, ...<2 element(s)>...,
440, 434.5, 433.181818181818, 427.666666666667, 400.076923076923}
{0, 109868, 103569, 84619, 94321, ...<2 element(s)>..., 95255, 85758, 77992, 71590, 73851}
{0, 331, 321, 290, 307, ...<2 element(s)>..., 308, 292, 279, 267, 271}