哈希聚合序列函数
所有哈希聚合 C 函数都接受两个输入序列迭代器参数 input
和 group_by
以及一个整数参数 n_groups
。它们返回结果聚合或结果计数序列以及结果 group_by
序列,这些值用于分组,以便应用程序能够将结果序列中的值与组进行对应。
有关更详细的解释,请参阅哈希聚合分组页面。
MCO_RET mco_seq_hash_agg_operation_TYPE(
mco_seq_iterator_h result_agg,
mco_seq_iterator_h result_group_by,
mco_seq_iterator_h input,
mco_seq_iterator_h group_by,
mco_size_t n_groups
);
其中 TYPE 是分析函数页面中列出的类型之一,operation 是以下类型之一。
max
mco_seq_hash_agg_max_TYPE()
返回具有相同类型的序列结果,其中每个元素组都具有最大值。
min
mco_seq_hash_agg_min_TYPE()
返回每个元素组中具有最小值的相同类型的序列结果。
sum
mco_seq_hash_agg_sum_TYPE()
返回与原序列类型相同的具有每组元素总和的结果序列。
avg
mco_seq_hash_agg_avg_TYPE()
返回包含每组元素平均值的双精度结果序列。
apptodxc
mco_seq_hash_agg_approxdc()
返回每个元素组的近似不同计数的 uint4 结果序列。
count
mco_seq_hash_agg_count()
返回一个 uint8 类型的结果计数序列,其中包含每个组中元素的数量。
MCO_RET mco_seq_hash_agg_count(
mco_seq_iterator_h result_count,
mco_seq_iterator_h result_group_by,
mco_seq_iterator_h group_by,
mco_size_t n_groups
);
distinct_count
mco_seq_hash_agg_distinct_count()
返回一个 uint8 类型的结果计数序列,其中包含每个组中不同元素的数量。
MCO_RET mco_seq_hash_agg_distinct_count(
mco_seq_iterator_h result_count,
mco_seq_iterator_h result_group_by,
mco_seq_iterator_h input,
mco_seq_iterator_h group_by,
mco_size_t n_groups,
mco_size_t n_pairs
);
dup_count
mco_seq_hash_agg_dup_count()
返回包含每个组中重复项计数的 uint8
结果计数序列。参数 min_occurrences
指定特定值出现次数的最小值,以进行计数。
- 当
min_occurrences = 1
时,此函数等同于mco_seq_hash_agg_distinct_count()
, - 当
min_occurrences = 2
时,它会计算出现次数超过一次的项……如果n_pairs
参数为 0,则使用mco_seq_hash_init_size
来指定哈希表的大小,并且当达到由mco_seq_hash_load_factor
确定的阈值时,它会自动扩展。
MCO_RET mco_seq_hash_agg_dup_count(
mco_seq_iterator_h result_count,
mco_seq_iterator_h result_group_by,
mco_seq_iterator_h input,
mco_seq_iterator_h group_by,
mco_size_t n_groups,
mco_size_t n_pairs,
mco_size_t min_occurrences
);
hash_aggreate
mco_seq_is_hash_aggreate()
如果迭代器是哈希聚合的结果,则返回 true
。
mco_bool mco_seq_is_hash_aggreate(
mco_seq_iterator_h iterator
);
示例
以下是一个示例代码片段,演示了如何使用哈希聚合函数来计算成交量值在 0..9、10..19、20..29 等区间内的收盘价平均值:
{
mco_trans_h trans;
mco_cursor_t quote_cursor;
Quote quote;
mco_seq_iterator_t close_iterator, volume_div_10_iterator;
mco_seq_iterator_t group_iterator, avg_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_close_iterator("e, &close_iterator);
Quote_volume_iterator("e, &volume_iterator);
rc = mco_seq_const_uint4(&const_iterator, 10));
rc = mco_seq_div_uint4(&volume_div_10_iterator, &volume_iterator, &const_iterator);
rc = mco_seq_hash_agg_avg_float(&avg_iterator, &group_iterator,
&close_iterator, &volume_div_10_iterator, 0);
...
mco_seq_free_hash(&avg_iterator);
}
...
}