# Grand Aggregate C Count and Approxdc Functions

> The C `mco_seq_agg_count()`and `mco_seq_agg_approxdc()`functions compute the count of all elements in the sequence and a count of distinct elements for the input sequence. The `mco_seq_agg_count()` API returns a `uint8` value and the `mco_seq_agg_approxdc()` and `mco_seq_agg_approxdc_hash()` APIs return a `uint4` value in the first element of the result sequence. Whereas `mco_seq_agg_approxdc()` returns the approximate distinct count of a single sequence, `mco_seq_agg_approxdc_hash()` returns the approximate distinct count for multiple sequences. The input for `mco_seq_agg_approxdc_hash()` is typically the result of function `mco_seq_hash()` for one or more sequences.

> ## Example

> Following is an example code snippet demonstrating these functions:

>         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, &quote_cursor);

>                 rc != MCO_S_CURSOR_END;

>                 rc = mco_cursor_next(trans, &quote_cursor))
>                 {
>                     Quote_from_cursor(trans, &quote_cursor, &quote);

>                     /* Initialize iterators */
>                     Quote_close_iterator(&quote, &close_iterator));

>                     /* Construct operator's pipeline */
>                     ...
>                     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]);

>                 }
>             }
>             ...
>         }