哈希聚合函数
概述
所有哈希聚合函数都接受输入和分组依据序列参数。 (有关更详细的解释,请参阅 Hash_Agg_Grouping 页面。)
函数 | 说明 |
---|---|
seq_hash_agg_count( input, group_by ) | 返回一个序列,其中包含每个组中元素的数量 |
seq_hash_agg_max( input, group_by ) | 返回一个序列,其中包含每个元素组的最大值 |
seq_hash_agg_min( input, group_by ) | 返回一个序列,其中包含每个元素组的最小值 |
seq_hash_agg_sum( input, group_by ) | 返回一个序列,其中包含每个元素组的总和 |
seq_hash_agg_avg( input, group_by ) | 返回一个序列,其中包含每个元素组的平均值 |
seq_hash_agg_approxdc( input, group_by ) | 返回一个序列,其中包含每个组中不同值的近似数量 |
SQL 的 seq_hash_agg_max()、seq_hash_agg_min()、seq_hash_agg_sum() 和 seq_hash_agg_avg() 函数分别返回每个组的最大值、最小值、总和和平均值序列。以下是一个展示这些功能的示例脚本:
SELECT symbol, volume, close,
seq_hash_agg_max(close, volume/10) as max_by_volume,
seq_hash_agg_min(close, volume/10) as "min",
seq_hash_agg_sum(close, volume/10) as "sum",
seq_hash_agg_avg(close, volume/10) as "avg",
seq_hash_group_by(max_by_volume) as "group_by"
FROM Quote WHERE symbol='SYM0';
symbol volume close max_by_volume min sum avg group_by
------------------------------------------------------------------------------
SYM0 {335, 808, 45, 402, 732, 48, 805, 450, 385, 420, 367, 69, 77}
{62.830002, 45.790001, 74.730003, 53.459999, 67.870003, 50.369999, 80.320000,
29.940001, 25.920000, 37.279999, 80.919998, 57.730000, 43.849998}
{80.320000, 67.870003, 43.849998, 25.920000, 74.730003, 53.459999, 57.730000,
29.940001, 62.830002, 37.279999, 80.919998}
{45.790001, 67.870003, 43.849998, 25.920000, 50.369999,53.459999, 57.730000,
29.940001, 62.830002, 37.279999, 80.919998}
{126.110001, 67.870003, 43.849998, 25.920000, 125.100002, 53.459999, 57.730000,
29.940001, 62.830002, 37.279999, 80.919998}
{63.055000, 67.870003, 43.849998, 25.920000, 62.550001, 53.459999, 57.730000,
29.940001, 62.830002, 37.279999, 80.919998}
{80, 73, 7, 38, 4, 40, 6, 45, 33, 42, 36}
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
g 9
示例
正如“分析函数库示例”页面中所解释的那样,以下示例中的数据取自 2013 年 IBM 的历史值。通过在 samples/xsql/scripts/financial 目录中运行各种脚本将数据加载到 xSQL 中。要重现下面的示例,请运行 g.bat(在 Linux 系统上为 g.sh),并指定示例编号 9。例如,以 scripts/financial 作为当前工作目录,只需键入:
g 9
以下是针对 2013 年数据展示部分 hash_agg() 函数用法的示例代码片段。
-------------------------------------------------------------------------
-- count
INSERT INTO SimpleSequence(testNumber,iVal1,iVal2)
VALUES(1,[1,1,2,2,2,3],[1,2,3,4,5,6]);
SELECT iVal1, iVal2,
seq_hash_agg_count(iVal1) as "count",
seq_hash_agg_approxdc(iVal1, iVal2) as "approxdc"
FROM SimpleSequence WHERE testNumber=1;
iVal1{}
iVal2{}
count_val1{}
group_by_count{}
approxdc_val1_val2{}
group_by_approxdc{}
-------------------------------------------------------------------------
{1, 1, 2, 2, 2, 3}
{1, 2, 3, 4, 5, 6}
{2, 1, 3}
{1, 3, 2}
{1, 1, 1, 1, 1, 1}
{1, 4, 3, 6, 5, 2}