组聚合运算
组聚合 C++ 序列方法都接受一个输入的 groupBy
序列参数,并生成一个结果序列,其中包含每个组的计算聚合值。对象的序列会根据 groupBy
序列中的值进行分组,该序列应是有序的。
以下是可用的方法:
groupAggCount
Sequence<uint8> GenericSequence::groupAggCount() const
返回一个序列,其中包含每个组中元素的个数。
groupAggMax
Sequence<T> groupAggMax(GenericSequence const& groupBy) const
返回一个序列,其中包含每个元素组的最大值。
groupAggMin
Sequence<T> groupAggMin(GenericSequence const& groupBy) const
返回一个序列,其中包含每个元素组的最小值。
groupAggFirst
Sequence<T> groupAggFirst(GenericSequence const& groupBy) const
返回一个序列,其中包含每个组的第一个元素。
groupAggLast
Sequence<T> groupAggLast(GenericSequence const& groupBy) const
返回一个序列,其中包含每个组的最后一个元素。
groupAggSum
Sequence<R> groupAggSum(GenericSequence const& groupBy) const
返回一个序列,其中包含每组元素的总和。
groupAggAvg
Sequence<double> groupAggAvg(GenericSequence const& groupBy) const
返回一个序列,其中包含每个元素组的平均值。
groupAggVar
Sequence<double> groupAggVar(GenericSequence const& groupBy) const
返回一个序列,其中包含每个元素组的方差。
groupAggVarSamp
Sequence<double> groupAggVarSamp(GenericSequence const& groupBy) const
返回一个序列,其中包含每个元素组的样本方差。
groupAggDev
Sequence<double> groupAggDev(GenericSequence const& groupBy) const
返回一个序列,其中包含每个元素组的标准差。
groupAggDevSamp
Sequence<double> groupAggDevSamp(GenericSequence const& groupBy) const
返回一个序列,其中包含每个元素组的样本标准差。
groupAggApproxDistinctCount
Sequence<uint4> GenericSequence::groupAggApproxDistinctCount(GenericSequence const& groupBy) const
返回一个序列,其中包含每个组中不同值的大致计数。
groupAggApproxDistinctHashValues
Sequence<uint4> groupAggApproxDistinctHashValues(GenericSequence const& groupBy) const
返回一个序列,其中包含多个序列中每个组的近似不同值计数。与 groupAggApproxDistinctCount()
仅返回单个序列中每个组的近似不同值计数不同,groupAggApproxDistinctHashValues()
会返回多个序列的近似不同值计数。
groupAggWavg
Sequence<double> groupAggWavg(GenericSequence const& weight, GenericSequence const& groupBy) const
返回每个组的加权平均值的双精度结果序列。
示例
以下是一个展示组聚合函数的示例代码片段:
{
mco_trans_h trans;
mco_cursor_t quote_cursor;
Quote quote;
MCO_RET rc;
...
rc = mco_trans_start(db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &trans);
if ( MCO_S_OK == rc )
{
for (rc = mco_cursor_first(trans, "e_cursor);
rc != MCO_S_CURSOR_END;
rc = mco_cursor_next(trans, "e_cursor))
{
Sequence<uint4> day_iterator;
quote.from.cursor(trans, "e_cursor);
// Calculate aggregate for each group. A group is determined by
// ordered sequence elements with the same value.
// Here calculate the total volume for each month of this year.
quote.day_search(day_iterator, DMY(1,1,2013), MCO_SEQ_BOUNDARY_INCLUSIVE,
DMY(1,1,2014), MCO_SEQ_BOUNDARY_EXCLUSIVE);
print_sequence(quote, quote.volume_project(day_iterator).groupAggSum<uint8>(
day_iterator / Sequence<uint4>(100) );
}
mco_trans_rollback(trans);
}
}