# Hash Aggregate Java SequenceIterator Methods

The Hash Aggregate Java SequenceIterator methods take various input arguments and return a GroupByResult result for the grouping values and groups for the group aggregates. The GroupByResult can then be converted to a SequenceIterator by calling its `getIterator()` method. When finished, the GroupByResult method `close()` should be called to release internal resources.

> GroupByResult hashAggCount(int nGroups) | Returns a sequence with the count of the number of elements in each group
> GroupByResult hashAggMax(SequenceIterator groupBy, int nGroups) | Returns a sequence with the maximum value for each group of elements
> GroupByResult hashAggMin(SequenceIterator groupBy, int nGroups) | Returns a sequence of the same type with the minimum value for each group of elements
> GroupByResult hashAggSum(SequenceIterator groupBy, int nGroups) | Returns a sequence of the same type with the sum of each group of elements
> GroupByResult hashAggAvg(SequenceIterator groupBy, int nGroups) | Returns a sequence with the average of each group of elements
> GroupByResult hashAggApproxdc(SequenceIterator groupBy, int nGroups) | Returns a sequence with the approximate district count for each group of elements
> GroupByResult hashAggDistinctCount(SequenceIterator groupBy, int nGroups, int nPairs) | Returns a sequence with the count of the number of distinct elements in each group
> GroupByResult hashAggDupCount(SequenceIterator groupBy, int nGroups, int nPairs, int minOccurrences) | Returns a sequence with the count of duplicates in each group. Parameter `minOccurrences` specifies minimum number for occurrences of a particular value to be counted. With `minOccurrences=1` this method is equivalent to `hashAggDistinctCount()`, with `minOccurrences=2` it counts items encountered more than once.

> ## Example

> Following is an example code snippet demonstrating use of a hash aggregate method to calculate the average Close price for Volume values in ranges of 0..9, 10..19, 20..29, etc.:

>         public static void hashAggregate(Connection con)
>         {
>             con.startTransaction(Database.TransactionType.ReadOnly);
>             Cursor<Quote> cursor = new Cursor<Quote>(con, Quote.class, "symbol");
>             for (Quote quote : cursor)
>             {
>                 SequenceIterator ranges = SequenceIterator.constant(10, Sequence.Type.UInt4);
>                 SequenceIterator volRanges = quote.volume.iterator().div(ranges);
>                 GroupByResult result = quote.close.iterator().hashAggAvg(volRanges, 0);
>                  SequenceIterator avg = result.getAggIterator();
>                 result.close();
>                 ...
>             }
>             con.commitTransaction();
>         }