# C Analytics Functions by Category

> The table below links to pages describing the functions in detail. The examples in these pages use the following schema definition for a database of stock quotes:

>         #define uint4 unsigned<4>
>         #define MAX_SYMBOL_LEN 21

>         declare database stockdb;

>         class Quote
>         {
>             char<MAX_SYMBOL_LEN> symbol;
>             sequence<date asc> day;
>             sequence<float> low;
>             sequence<float> high;
>             sequence<float> open;
>             sequence<float> close;
>             sequence<uint4> volume;
>             sequence<char<15>> day_str;

>             unique tree<symbol> by_sym;
>         };

> Note that the primary key for this table is the unique index `by_sym` on field `symbol` and all of the other fields except `day_str` are of type sequence where the field `day` is an ordered sequence. The `day_str` field is added to provide a convenient character array representation of the date type stored in field `day`. Typically analytics operations are performed on one or more sequence fields extracted from a Quote object which is effectively a "row" from a "result set" cursor. For example, the following code snippet iterates through the entire database printing out the values of the Quote character field `symbol` and sequence fields `day` and `high`:

>         mco_trans_start(db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &trans);

>         /* Iterate through all objects */
>         Quote_by_sym_index_cursor(trans, &quote_cursor);
>         for (rc = mco_cursor_first(trans, &quote_cursor);
>             rc != MCO_S_CURSOR_END;
>             rc = mco_cursor_next(trans, &quote_cursor))
>         {

>             /* Get current object */
>             Quote_from_cursor(trans, &quote_cursor, &quote);
>             /* Get symbol name */
>             Quote_symbol_get(&quote, symbol, sizeof symbol);
>             /* Initialize iterators */
>             Quote_high_iterator(&quote, &high_iterator);
>             Quote_day_iterator(&quote, &day_iterator);
>             Quote_day_str_iterator(&quote, &day_str_iterator);

>             while ((rc = mco_seq_next_uint4(&day_iterator, &day)) != MCO_S_CURSOR_END)
>             {
>                 mco_seq_next_float(&high_iterator, &high);
>                 mco_seq_next_char(&day_str_iterator, buff);
>                 printf("%s[(%s)]: %f\n", symbol, buff, high);
>             }
>         }
>         mco_trans_commit(trans);

> Please use the links below to view descriptions and examples of these functions by category:

> Unary_Functions | Functions that take a single input sequence and produce a result sequence of values such as: abs, neg, match
> Binary_Functions | Functions that take two input sequences and produce a result sequence of values such as: add, sub, mul, div, mod, max, min
> Comparison_Functions | Functions that take two input sequences and produce a result sequence of boolean values for the comparison operators: ==, !=, >, >=, <, <=
> Logical_Functions | Functions that take two input sequences and produce a result sequence of boolean values from the following logical operators: not, and, or, xor
> Conversion_Functions | Convert values of the input sequence to the desired type, or print data into the result sequence
> Collapse_Functions | Functions that collapse two sequences to scalar values such as: weighted sum, weighted average, covariance, correlation
> Conditional_Functions | Functions that perform operations on one or two input sequences based on a condition such as: if, iif, filter, filter_pos
> Manipulator_Functions | Functions that perform various manipulations of input sequences
> Iterator_Functions | Functions that extract values from and reset sequence iterators such as: next, reset
> Generated_Functions | Generated functions that perform operations on the database object's sequence fields such as: first, last, append, insert, delete, search, join, count, map, subseq, iterator, from_cursor, project, store
> Top_Functions | Functions that return the top `n` elements (or their positions) of the input sequence: top_max, top_min, top_pos_max, top_pos_min
> RLE_Functions | Functions that perform Run Length Encryption (RLE) operations: count, decode, is_rle
> Grand Aggregate | Functions that take a single input sequence iterator argument and produce a scalar value in the result sequence
> Group_Agg | Functions that split the input sequence into groups based on the values of a `group_by` argument
> Grid_Agg | Functions that split the input sequence into intervals specified by the interval argument which determines the maximum number of elements in the group
> Window_Agg | Like the “Grid” functions illustrated above, however the interval argument indicates the next N elements from the input sequence
> Hash_Agg | Functions that group the resulting sequence by grouping sequence that is not ordered
> Cumulative_Agg | Functions that accumulate the average, sum, product, etc. of all preceding elements in the result sequence
> Miscellaneous | Functions that provide sort, rank and histogram functionalities