组聚合序列函数
所有组聚合 C 序列函数都接受两个输入序列迭代器参数,即 input
和 group_by
,但 mco_seq_group_agg_wavg_TYPE()
函数除了这两个参数外,还有 left
和 right
序列。所有组聚合函数的结果都以计算出的每个组的聚合值形式返回到结果序列中。
输入序列会根据 group_by
序列中的值进行分组,group_by
序列应是有序的。函数采用以下形式:
MCO_RET mco_seq_group_agg_operation(
mco_seq_iterator_h result,
mco_seq_iterator_h input,
mco_seq_iterator_h group_by
);
或
MCO_RET mco_seq_group_agg_operation_TYPE(
mco_seq_iterator_h result,
mco_seq_iterator_h input,
mco_seq_iterator_h group_by
);
其中 TYPE 是分析函数页面中列出的类型之一,operation 是以下类型之一。
count
mco_seq_group_agg_count()
返回一个 uint8 结果序列,其中包含每个组中元素的数量计数。
max
mco_seq_group_agg_max_TYPE()
返回具有相同类型的序列结果,其中每个元素组都具有最大值。
min
mco_seq_group_agg_min_TYPE()
返回每个元素组中具有最小值的相同类型的序列结果。
first
mco_seq_group_agg_first_TYPE()
返回与每个组的第一个元素相同类型的序列结果。
last
mco_seq_group_agg_last_TYPE()
返回每个组的最后一个元素所构成的相同类型的序列结果。
sum
mco_seq_group_agg_sum_TYPE()
返回与原序列类型相同的具有每组元素总和的结果序列。
avg
mco_seq_group_agg_avg_TYPE()
返回每个元素组的平均值所构成的双精度结果序列。
var
mco_seq_group_agg_var_TYPE()
返回每个元素组方差的双精度结果序列。
var_samp
mco_seq_group_agg_var_samp_TYPE()
返回每个元素组的样本方差的双精度结果序列。
dev
mco_seq_group_agg_dev_TYPE()
返回每个元素组的标准差的双精度结果序列。
ev_samp
mco_seq_group_agg_dev_samp_TYPE()
返回每个元素组的样本标准差的双精度结果序列。
approxdc
mco_seq_group_agg_approxdc()
返回每个组中不同值的近似计数的 uint4 结果序列。
approxdc_hash
mco_seq_group_agg_approxdc_hash()
返回多个序列中每个组的近似不同值计数的 uint4 结果序列。与 mco_seq_group_agg_approxdc() 仅返回单个序列每个组的近似不同值计数不同,mco_seq_group_agg_approxdc_hash() 返回多个序列的近似不同值计数。mco_seq_group_agg_approxdc_hash() 的输入通常是单个或多个序列的 mco_seq_hash() 函数的结果。
wavg
mco_seq_group_agg_wavg_TYPE()
返回每个组的加权平均值的双精度结果序列。
MCO_RET mco_seq_group_agg_wavg_TYPE(
mco_seq_iterator_h result,
mco_seq_iterator_h left,
mco_seq_iterator_h right,
mco_seq_iterator_h group_by);
示例
以下是一个展示组聚合函数的示例代码片段:
{
mco_trans_h trans;
mco_cursor_t quote_cursor;
Quote quote;
mco_seq_iterator_t volume_iterator, day_iterator;
mco_seq_iterator_t month_iterator, const_iterator, sum_iterator;
MCO_RET rc;
...
for (rc = mco_cursor_first(trans, "e_cursor);
rc != MCO_S_CURSOR_END;
rc = mco_cursor_next(trans, "e_cursor))
{
Quote_from_cursor(trans, "e_cursor, "e);
Quote_day_search("e, &day_iterator,
DMY(1,1,2013), MCO_SEQ_BOUNDARY_INCLUSIVE,
DMY(1,1,2014), MCO_SEQ_BOUNDARY_EXCLUSIVE);
Quote_volume_project("e, &volume_iterator, &day_iterator);
// As date is represetned as YYYYMMDD, to group it by month
// we must divide date by 100
rc = mco_seq_const_uint4(&const_iterator, 100);
mco_seq_div_uint4(&month_iterator, &day_iterator, &const_iterator);
mco_seq_group_agg_sum_uint4(&sum_iterator, &volume_iterator, &month_iterator);
...
}
...
}