全局聚合函数
概述
所有全局聚合函数都会对输入序列执行指定操作,并生成一个标量结果。
函数 | 说明 |
---|---|
seq_count() | 所有元素的数量 |
seq_max() | 元素的最大值 |
seq_min() | 元素的最小值 |
seq_sum() | 所有元素的总和 |
seq_prd() | 所有元素的乘积 |
seq_avg() | 所有元素的平均值 |
seq_var() | 元素的方差 |
seq_var_samp() | 元素的样本方差 |
seq_dev() | 元素的标准差 |
seq_dev_samp() | 元素的样本标准差 |
seq_approxdc() | 不同值的近似数量 |
seq_empty() | 如果序列为空则返回 true ;否则返回 false |
计数、最大值和最小值函数
seq_count()
函数返回序列中元素的整数计数;seq_max()
和 seq_min()
函数分别返回序列中最大值和最小值元素的值。 以下是一个示例脚本,演示了 seq_count()
、seq_max()
和 seq_min()
函数的用法:
INSERT INTO SimpleSequence(testNumber,iVal1)
VALUES(1,'{-3,-2,-1,0,1,2,3}');
SELECT iVal1, seq_count(iVal1) AS "count", seq_max(iVal1) AS "max", seq_min(iVal1) AS "min"
FROM SimpleSequence WHERE testNumber = 1;
iVal1{}
count
max
min
--------------------------------------------------------------------
{-3, -2, -1, 0, 1, 2, 3}
7
3.000000
-3.000000
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
f 1
求和、乘积和平均值函数
seq_sum()
、seq_prd()
和 seq_avg()
函数分别计算序列中值的总和、乘积和平均值,并返回一个双精度值。 以下是一个示例脚本,演示了 seq_sum()
、seq_prd()
和 seq_avg()
函数的用法:
INSERT INTO SimpleSequence(testNumber,fVal1)
VALUES(3,'{1.1,2.2,3.3}');
SELECT fVal1, seq_sum(fVal1) AS "sum", seq_prd(fVal1) AS "prd",
seq_avg(fVal1) AS "avg", seq_var(fVal1) AS "var", seq_dev(fVal1) AS "dev"
FROM SimpleSequence WHERE testNumber = 3;
fVal1{}
sum
prd
avg
------------------------------------------------------------------------
{1.100000, 2.200000, 3.300000}
6.600000
7.986000
2.200000
为了验证计算结果:
sum = 1.1 + 2.2 +.3.3 = 6.6
prd = 1.1 * 2.2 = 2.42 * 3.3 = 7.986
avg = 6.6 / 3 = 2.2
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
f 1
变量和偏差函数
seq_var()
和 seq_dev()
函数计算输入序列的方差和标准差,并返回一个双精度值。方差始终为正数;值越小,序列元素值越接近平均值。seq_dev()
函数返回的标准差是方差的平方根。 以下是一个示例脚本,演示了 seq_var()
和 seq_dev()
函数的用法:
INSERT INTO SimpleSequence(testNumber,fVal1)
VALUES(4,'{2,3,5,7}');
SELECT fVal1, seq_var(fVal1) AS "var", seq_dev(fVal1) AS "dev"
FROM SimpleSequence WHERE testNumber = 4;
fVal1{}
var
dev
------------------------------------------------------------------------
{2.000000, 3.000000, 5.000000, 7.000000}
3.687500
1.920286
Grand_Agg、Group_Agg、Grid_Agg 和 Window_Agg 函数的方差和标准差计算采用“总体方差”方法,可使用 Excel 的 VAR.P() 和 STDEV.P() 函数进行验证。
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
f 1
近似函数
seq_approxdc() 函数返回序列中不同值的整数计数。 以下是一个展示 seq_approxdc() 函数的示例脚本:
INSERT INTO SimpleSequence(testNumber,fVal1)
VALUES(4,'{1.1,1.1,2.2,3.3}');
SELECT fVal1, seq_approxdc(fVal1) AS "approxdc"
FROM SimpleSequence WHERE testNumber = 4;
fVal1 approxdc
-----------------------------------------------------
{1.100000, 1.100000, 2.200000, 3.300000} 3
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
f 1
空函数
seq_empty()
函数返回一个布尔值,用于指示指定的序列是否有值。 以下是一个演示 seq_empty()
函数的示例脚本:
INSERT INTO SimpleSequence(testNumber,fVal1)
VALUES(5,'{1.1,1.1,2.2,3.3}');
SELECT seq_empty(iVal1) AS "iVal1 empty?", seq_empty(fVal1) AS "fVal1 empty?"
FROM SimpleSequence WHERE testNumber = 5;
iVal1 empty? fVal1 empty?
-----------------------------------------------------------------
true false
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
f 1
示例
以下是一个示例代码片段,展示了部分高级聚合函数的用法:
-- count, max, min
INSERT INTO SimpleSequence(testNumber,iVal1)
VALUES(1,'{-3,-2,-1,0,1,2,3}');
SELECT iVal1, seq_count(iVal1) AS "count", seq_max(iVal1) AS "max",
seq_min(iVal1) AS "min"
FROM SimpleSequence WHERE testNumber = 1;
iVal1{}
count
max
min
-------------------------------------------------------------------------
{-3, -2, -1, 0, 1, 2, 3}
7
3
-3
-- _sum, _prd, _avg, _var, _dev
INSERT INTO SimpleSequence(testNumber,fVal1)
VALUES(3,'{1.1,2.2,3.3}');
SELECT fVal1, seq_sum(fVal1) AS "sum", seq_prd(fVal1) AS "prd", seq_avg(fVal1) AS "avg",
seq_var(fVal1) AS "var", seq_dev(fVal1) AS "dev"
FROM SimpleSequence WHERE testNumber = 3;
fVal1{}
sum
prd
avg
var
dev
-------------------------------------------------------------------------
{1.10000002384186, 2.20000004768372, 3.29999995231628}
6.60000002384186
7.98600023078918
2.20000000794729
0.806666614214581
0.898146209820306
-- _approxdc
INSERT INTO SimpleSequence(testNumber,fVal1)
VALUES(4,'{1.1,1.1,2.2,3.3}');
SELECT fVal1, seq_approxdc(fVal1) AS "approxdc"
FROM SimpleSequence WHERE testNumber = 4;
fVal1
approxdc
-------------------------------------------------------------------------
{1.10000002384186, 1.10000002384186, 2.20000004768372, 3.29999995231628}
3
-- _empty
INSERT INTO SimpleSequence(testNumber,fVal1,iVal1)
VALUES(5,'{1.1,1.1,2.2,3.3}', '{}');
SELECT seq_empty(iVal1) AS "iVal1 empty?", seq_empty(fVal1) AS "fVal1 empty?"
FROM SimpleSequence WHERE testNumber = 5;
iVal1 empty?
fVal1 empty?
-------------------------------------------------------------------------
true
false