All Hash Aggregate C functions take two input sequence iterator arguments, input, group_by and an integer argument n_groups. They return the result_agg or result_count sequence and the result_group_by sequence which are the values used for grouping in order for the application to make the correspondence between the values in the result sequence and the groups. (Please see the Hash_Agg_Grouping page for a more detailed explanation.)
The function signatures are of the following form unless specified in the table below:
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);where TYPE is one of the types listed in the Analytics Functions page and operation is one of the following:
mco_seq_hash_agg_max_TYPE() Returns the result sequence of the same TYPEwith the maximum value for each group of elementsmco_seq_hash_agg_min_TYPE() Returns the result sequence of the same TYPEwith the minimum value for each group of elementsmco_seq_hash_agg_sum_TYPE() Returns the result sequence of the same TYPEwith the sum of each group of elementsmco_seq_hash_agg_avg_TYPE() Returns the doubleresult sequence with the average of each group of elementsmco_seq_hash_agg_approxdc() Returns the uint4result sequence with the approximate distinct count for each group of elementsmco_seq_hash_agg_count() Returns the
uint8result_count sequence with the count of the number of elements in each groupMCO_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);mco_seq_hash_agg_distinct_count() Returns the
uint8result_count sequence with the count of the number of distinct elements in each groupMCO_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);mco_seq_hash_agg_dup_count() Returns the
uint8result_count sequence with the count of duplicates in each group. Parametermin_occurrencesspecifies minimal number for occurrences of a particular value to be counted. Withmin_occurrences=1this function is equivalent tomco_seq_hash_agg_distinct_count(), withmin_occurrences=2it counts items encountered more than once... Ifn_pairsparameter is 0, thenmco_seq_hash_init_sizeis used to specify size of hash table and it is automatically extended when the threshold determined bymco_seq_hash_load_factoris reached.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);mco_seq_is_hash_aggreate() Returns
trueif the iterator is the result of hash aggregationmco_bool mco_seq_is_hash_aggreate( mco_seq_iterator_h iterator);Example
Following is an example code snippet demonstrating how to use a hash aggregate function to calculate the average Close price for Volume values in ranges of 0..9, 10..19, 20..29, etc.:
{ 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); } ... }