# QBAggregates

## Overview

The `QBAggregates` class provides a collection of aggregate functions that can be utilized within a `QBSelect` query. These functions enable the creation of expressions for common operations such as averages, counts, maximums, minimums, and sums. They are designed to work within query results or as part of grouping and filtering logic.

Key methods include `avg`, `count`, `max`, `min`, and `sum`, which allow you to compute aggregate values for specific columns or expressions. Additionally, the `parent` and `root` properties give access to the parent query or table clause, facilitating complex query structures and subqueries.

For more information about constructing and executing queries, refer to [QBSelect](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbselect) section of the documentation.

## Properties Summarized

| Type                                                                                       | Name              | Summary                                                                      |
| ------------------------------------------------------------------------------------------ | ----------------- | ---------------------------------------------------------------------------- |
| [QBSelect](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbselect) | [parent](#parent) | Get query builder parent table clause, this may be a query or a join clause. |
| [QBSelect](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbselect) | [root](#root)     | Get query builder parent.                                                    |

## Methods Summarized

| Type                                                                                                       | Name                               | Summary                        |
| ---------------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------ |
| [QBGenericColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbgenericcolumn)   | [avg(aggregee)](#avg-aggregee)     | Create avg(value) expression   |
| [QBCountAggregate](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcountaggregate) | [count()](#count)                  | Create count(\*) expression    |
| [QBCountAggregate](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcountaggregate) | [count(aggregee)](#count-aggregee) | Create count(value) expression |
| [QBGenericColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbgenericcolumn)   | [max(aggregee)](#max-aggregee)     | Create max(value) expression   |
| [QBGenericColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbgenericcolumn)   | [min(aggregee)](#min-aggregee)     | Create min(value) expression   |
| [QBGenericColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbgenericcolumn)   | [sum(aggregee)](#sum-aggregee)     | Create sum(value) expression   |

## Properties Detailed

### parent

Get query builder parent table clause, this may be a query or a join clause.

**Type**\
[QBSelect](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbselect)

**Sample**

```js
var query = datasources.db.example_data.person.createSelect();
	query.where.add(query.joins.person_to_parent.joins.person_to_parent.columns.name.eq('john'))
	foundset.loadRecords(query)
```

### root

Get query builder parent.

**Type**\
[QBSelect](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbselect)

**Sample**

```js
var subquery = datasources.db.example_data.order_details.createSelect();

	var query = datasources.db.example_data.orders.createSelect();
	query.where.add(query
		.or
			.add(query.columns.order_id.not.isin([1, 2, 3]))

			.add(query.exists(
					subquery.where.add(subquery.columns.orderid.eq(query.columns.order_id)).root
			))
		)

	foundset.loadRecords(query)
```

## Methods Detailed

### avg(aggregee)

Create avg(value) expression

**Parameters**

* [Object](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/object) **aggregee** The column or expression to calculate the average for.

**Returns:** [QBGenericColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbgenericcolumn) A QBColumn object representing the average operation for the specified aggregee.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
	query.result.add(query.aggregates.avg(query.columns.amount)).add(query.columns.countryCode)
	query.groupBy.add(query.columns.countryCode)
 var ds = databaseManager.getDataSetByQuery(query, 100);
```

### count()

Create count(\*) expression

**Returns:** [QBCountAggregate](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcountaggregate) A QBCountAggregate object representing the count operation.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
	query.result.add(query.aggregates.count().add(query.columns.countryCode)
	query.groupBy.add(query.columns.countryCode)
 var ds = databaseManager.getDataSetByQuery(query, 100);
```

### count(aggregee)

Create count(value) expression

**Parameters**

* [Object](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/object) **aggregee** The column, expression, or value to count. Can also be a special value like "\*" for counting all rows.

**Returns:** [QBCountAggregate](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcountaggregate) A QBCountAggregate object representing the count operation with the specified aggregee.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
	query.result.add(query.aggregates.count(query.columns.amount)).add(query.columns.countryCode)
	query.groupBy.add(query.columns.countryCode)
 var ds = databaseManager.getDataSetByQuery(query, 100);
```

### max(aggregee)

Create max(value) expression

**Parameters**

* [Object](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/object) **aggregee** The column or expression to calculate the maximum value for. This can be a specific column or a computed expression.

**Returns:** [QBGenericColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbgenericcolumn) A QBAggregate object representing the maximum value operation for the specified aggregee.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
	query.result.add(query.aggregates.max(query.columns.amount)).add(query.columns.countryCode)
	query.groupBy.add(query.columns.countryCode)
 var ds = databaseManager.getDataSetByQuery(query, 100);
```

### min(aggregee)

Create min(value) expression

**Parameters**

* [Object](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/object) **aggregee** The column or expression to calculate the minimum value for. This can be a specific column or a computed expression.

**Returns:** [QBGenericColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbgenericcolumn) A QBColumn object representing the minimum value operation for the specified aggregee.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
	query.result.add(query.aggregates.min(query.columns.amount)).add(query.columns.countryCode)
	query.groupBy.add(query.columns.countryCode)
 var ds = databaseManager.getDataSetByQuery(query, 100);
```

### sum(aggregee)

Create sum(value) expression

**Parameters**

* [Object](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/object) **aggregee** The column or expression to calculate the sum for. This can be a specific column or a computed expression.

**Returns:** [QBGenericColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbgenericcolumn) A QBColumn object representing the sum operation for the specified aggregee.

**Sample**

```js
var query = datasources.db.example_data.orders.createSelect();
	query.result.add(query.aggregates.sum(query.columns.amount)).add(query.columns.countryCode)
	query.groupBy.add(query.columns.countryCode)
 var ds = databaseManager.getDataSetByQuery(query, 100);
```

***
