大集合序列函数
所有大集合 C 序列函数都接受一个输入序列,并生成一个结果序列。函数采用以下形式:
MCO_RET mco_seq_agg_operation(
mco_seq_iterator_h result,
mco_seq_iterator_h input
);
或
MCO_RET mco_seq_agg_operation_TYPE(
mco_seq_iterator_h result,
mco_seq_iterator_h input
);
其中 TYPE 是分析函数页面中列出的类型之一,operation 是以下类型之一。
计数和近似计算
mco_seq_agg_count()
:所有元素的计数。mco_seq_agg_approxdc()
:不同值的大致计数。mco_seq_agg_approxdc_hash()
:多个序列中不同值的大致计数。
以上函数分别计算输入序列中所有元素的数量以及不同元素的数量。
函数返回值有以下不同:
mco_seq_agg_count()
返回一个uint8
值;mco_seq_agg_approxdc()
和mco_seq_agg_approxdc_hash()
API 在结果序列的第一个元素中返回一个uint4
值;mco_seq_agg_approxdc()
返回单个序列的近似不同元素数量;mco_seq_agg_approxdc_hash()
则返回多个序列的近似不同元素数量。
mco_seq_agg_approxdc_hash()
的输入通常是 mco_seq_hash()
函数对一个或多个序列的结果。
以下是演示这些函数的示例代码片段:
void grand_aggregate(mco_db_h db)
{
mco_trans_h trans;
mco_cursor_t quote_cursor;
Quote quote;
mco_seq_iterator_t close_iterator, count_iterator, approxdc_iterator;
mco_seq_iterator_t high_iterator, low_iterator, approxdc_hash_iterator;
mco_seq_iterator_t hash_iterator[2];
uint8 count, approxdc;
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));
/* 构造操作流水线 */
...
rc = mco_seq_agg_count(&count_iterator, &close_iterator);
rc = mco_seq_next_uint8(&count_iterator, &count);
...
rc = mco_seq_agg_approxdc(&approxdc_iterator, &close_iterator[1]);
rc = mco_seq_next_double(&approxdc_iterator, &approxdc);
...
mco_seq_hash(&hash_iterator[0], &high_iterator, 0);
mco_seq_hash(&hash_iterator[1], &low_iterator, &hash_iterator[0]);
mco_seq_agg_approxdc_hash(&approxdc_hash_iterator, &hash_iterator[1]);
}
}
...
}
最大和最小函数
mco_seq_agg_max_TYPE()
:最大元素值。mco_seq_agg_min_TYPE()
:最小元素值。mco_seq_agg_min_max_TYPE()
:最大和最小元素值。
以上函数用于提取输入序列中的最大值和最小值。
以下是演示这些函数的示例代码片段:
void grand_aggregate(mco_db_h db)
{
mco_trans_h trans;
mco_cursor_t quote_cursor;
Quote quote;
mco_seq_iterator_t close_iterator, max_iterator, min_iterator, max_min_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);
/* Initialize iterators */
Quote_close_iterator("e, &close_iterator));
/* Construct operator's pipeline */
mco_seq_agg_max_float(&max_iterator, &close_iterator);
mco_seq_agg_min_float(&min_iterator, &close_iterator);
// Get min and max in a single call
mco_seq_agg_min__max_float(&max_min_iterator, &close_iterator);
...
}
}
求和、乘积和平均值函数
mco_seq_agg_sum_TYPE()
:所有元素之和。mco_seq_agg_prd_TYPE()
:所有元素的乘积。mco_seq_agg_avg_TYPE()
“:所有元素的平均值。
以上函数分别计算输入序列的总和、乘积和平均值,并将结果作为单个元素返回到结果序列中。
void grand_aggregate(mco_db_h db)
{
mco_trans_h trans;
mco_cursor_t quote_cursor;
Quote quote;
mco_seq_iterator_t close_iterator, sum_iterator, prd_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);
/* Initialize iterators */
Quote_close_iterator("e, &close_iterator));
/* Construct operator's pipeline */
mco_seq_agg_sum_float(&sum_iterator, &close_iterator);
mco_seq_agg_prd_float(&prd_iterator, &close_iterator);
mco_seq_agg_avg_float(&avg_iterator, &close_iterator);
...
}
}
变异函数和偏差函数
mco_seq_agg_var_TYPE()
:元素的方差。mco_seq_agg_var_samp_TYPE()
:元素的样本方差。mco_seq_agg_dev_TYPE()
:元素的标准差。mco_seq_agg_dev_samp_TYPE()
:元素的样本标准差。
mco_seq_agg_var_TYPE()
和 mco_seq_agg_dev_TYPE()
函数计算输入序列的方差和标准差,并将结果作为单个元素返回到结果序列中,结果为双精度值。方差始终为正数;值越小,序列元素值越接近平均值。
mco_seq_agg_var_samp_TYPE()
和 mco_seq_agg_dev_samp_TYPE()
函数对序列元素执行样本方差和样本标准差计算。
以下是一个示例代码片段,展示了这些函数的用法:
void grand_aggregate(mco_db_h db)
{
mco_trans_h trans;
mco_cursor_t quote_cursor;
Quote quote;
mco_seq_iterator_t close_iterator, var_iterator, dev_iterator;
mco_seq_iterator_t var_samp_iterator, dev_samp_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);
/* Initialize iterators */
Quote_close_iterator("e, &close_iterator));
/* Construct operator's pipeline */
mco_seq_agg_var_float(&var_iterator, &close_iterator);
mco_seq_agg_dev_float(&dev_iterator, &close_iterator);
mco_seq_agg_var_samp_float(&var_samp_iterator, &close_iterator);
mco_seq_agg_dev_samp_float(&dev_samp_iterator, &close_iterator);
...
}
}
示例
以下是演示大集合函数的示例代码片段:
{
mco_trans_h trans;
mco_cursor_t quote_cursor;
Quote quote;
mco_seq_iterator_t close_iterator, max_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);
...
rc = mco_seq_agg_max_float(&max_iterator, &close_iterator);
...
}
...
}