# 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](/reference/servoycore/dev-api/database-manager/qbselect.md) | [parent](#parent) | Get query builder parent table clause, this may be a query or a join clause. |
| [QBSelect](/reference/servoycore/dev-api/database-manager/qbselect.md) | [root](#root)     | Get query builder parent.                                                    |

## Methods Summarized

| Type                                                                                   | Name                               | Summary                        |
| -------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------ |
| [QBGenericColumn](/reference/servoycore/dev-api/database-manager/qbgenericcolumn.md)   | [avg(aggregee)](#avg-aggregee)     | Create avg(value) expression   |
| [QBCountAggregate](/reference/servoycore/dev-api/database-manager/qbcountaggregate.md) | [count()](#count)                  | Create count(\*) expression    |
| [QBCountAggregate](/reference/servoycore/dev-api/database-manager/qbcountaggregate.md) | [count(aggregee)](#count-aggregee) | Create count(value) expression |
| [QBGenericColumn](/reference/servoycore/dev-api/database-manager/qbgenericcolumn.md)   | [max(aggregee)](#max-aggregee)     | Create max(value) expression   |
| [QBGenericColumn](/reference/servoycore/dev-api/database-manager/qbgenericcolumn.md)   | [min(aggregee)](#min-aggregee)     | Create min(value) expression   |
| [QBGenericColumn](/reference/servoycore/dev-api/database-manager/qbgenericcolumn.md)   | [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](/reference/servoycore/dev-api/database-manager/qbselect.md)

**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](/reference/servoycore/dev-api/database-manager/qbselect.md)

**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](/reference/servoycore/dev-api/js-lib/object.md) **aggregee** The column or expression to calculate the average for.

**Returns:** [QBGenericColumn](/reference/servoycore/dev-api/database-manager/qbgenericcolumn.md) 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](/reference/servoycore/dev-api/database-manager/qbcountaggregate.md) 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](/reference/servoycore/dev-api/js-lib/object.md) **aggregee** The column, expression, or value to count. Can also be a special value like "\*" for counting all rows.

**Returns:** [QBCountAggregate](/reference/servoycore/dev-api/database-manager/qbcountaggregate.md) 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](/reference/servoycore/dev-api/js-lib/object.md) **aggregee** The column or expression to calculate the maximum value for. This can be a specific column or a computed expression.

**Returns:** [QBGenericColumn](/reference/servoycore/dev-api/database-manager/qbgenericcolumn.md) 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](/reference/servoycore/dev-api/js-lib/object.md) **aggregee** The column or expression to calculate the minimum value for. This can be a specific column or a computed expression.

**Returns:** [QBGenericColumn](/reference/servoycore/dev-api/database-manager/qbgenericcolumn.md) 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](/reference/servoycore/dev-api/js-lib/object.md) **aggregee** The column or expression to calculate the sum for. This can be a specific column or a computed expression.

**Returns:** [QBGenericColumn](/reference/servoycore/dev-api/database-manager/qbgenericcolumn.md) 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);
```

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbaggregates.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
