# AggregateSelectQueryBuilder (/docs/core/reference/api/interfaces/AggregateSelectQueryBuilder)



[@kysoql/core](/docs/core/reference/api) / AggregateSelectQueryBuilder

Type-safe builder for grouped and aggregate Salesforce SELECT queries.

## Type Parameters [#type-parameters]

| Type Parameter                                           | Default type |
| -------------------------------------------------------- | ------------ |
| `DB`                                                     | -            |
| `TB` *extends* keyof `DB`                                | -            |
| `O`                                                      | -            |
| `GroupedBy` *extends* `string`                           | `never`      |
| `GroupMode` *extends* `AggregateGroupMode`               | `"none"`     |
| `AdvancedFieldCount` *extends* `AdvancedGroupFieldCount` | `0`          |

## Methods [#methods]

<a id="api-call" />

### $call() [#call]

```ts
$call<T>(func): T;
```

Passes this builder to `func` and returns the callback result.

#### Type Parameters [#type-parameters-1]

| Type Parameter |
| -------------- |
| `T`            |

#### Parameters [#parameters]

| Parameter | Type          |
| --------- | ------------- |
| `func`    | (`qb`) => `T` |

#### Returns [#returns]

`T`

***

<a id="api-asserttype" />

### $assertType() [#asserttype]

```ts
$assertType<T>(): O extends T ? AggregateSelectQueryBuilder<DB, TB, T, GroupedBy, GroupMode, AdvancedFieldCount> : KysoqlTypeError<"$assertType() call failed: The type passed in is not equal to the output type of the query.">;
```

Asserts at compile time that the current query output exactly matches `T`.

#### Type Parameters [#type-parameters-2]

| Type Parameter |
| -------------- |
| `T`            |

#### Returns [#returns-1]

`O` *extends* `T` ? `AggregateSelectQueryBuilder`\<`DB`, `TB`, `T`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`> : [`KysoqlTypeError`](/docs/core/reference/api/interfaces/KysoqlTypeError)\<`"$assertType() call failed: The type passed in is not equal to the output type of the query."`>

***

<a id="api-castto" />

### $castTo() [#castto]

```ts
$castTo<C>(): AggregateSelectQueryBuilder<DB, TB, C, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Changes only the TypeScript output type; the generated SOQL is unchanged.

#### Type Parameters [#type-parameters-3]

| Type Parameter |
| -------------- |
| `C`            |

#### Returns [#returns-2]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `C`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-narrowtype" />

### $narrowType() [#narrowtype]

```ts
$narrowType<T>(): AggregateSelectQueryBuilder<DB, TB, NarrowPartial<O, T>, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Narrows selected output properties at the type level without changing SOQL.

#### Type Parameters [#type-parameters-4]

| Type Parameter |
| -------------- |
| `T`            |

#### Returns [#returns-3]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, [`NarrowPartial`](/docs/core/reference/api/type-aliases/NarrowPartial)\<`O`, `T`>, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-if" />

### $if() [#if]

```ts
$if<O2>(condition, func): AggregateSelectQueryBuilder<DB, TB, ConditionalOutput<O, O2>, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Conditionally applies a builder callback; when false, the runtime query is unchanged.

#### Type Parameters [#type-parameters-5]

| Type Parameter |
| -------------- |
| `O2`           |

#### Parameters [#parameters-1]

| Parameter   | Type                                                                                                             |
| ----------- | ---------------------------------------------------------------------------------------------------------------- |
| `condition` | `boolean`                                                                                                        |
| `func`      | (`qb`) => `AggregateSelectQueryBuilder`\<`DB`, `TB`, `O` & `O2`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`> |

#### Returns [#returns-4]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `ConditionalOutput`\<`O`, `O2`>, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-cleargroupby" />

### clearGroupBy() [#cleargroupby]

```ts
clearGroupBy(): AggregateSelectQueryBuilder<DB, TB, O, never, "none", 0>;
```

Returns a builder with the `GROUP BY` clause removed.

#### Returns [#returns-5]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `never`, `"none"`, `0`>

***

<a id="api-clearlimit" />

### clearLimit() [#clearlimit]

```ts
clearLimit(): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Returns a builder with the `LIMIT` clause removed.

#### Returns [#returns-6]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-clearoffset" />

### clearOffset() [#clearoffset]

```ts
clearOffset(): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Returns a builder with the `OFFSET` clause removed.

#### Returns [#returns-7]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-clearorderby" />

### clearOrderBy() [#clearorderby]

```ts
clearOrderBy(): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Returns a builder with all `ORDER BY` items removed.

#### Returns [#returns-8]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-clearselect" />

### clearSelect() [#clearselect]

```ts
clearSelect(): AggregateSelectQueryBuilder<DB, TB, unknown, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Returns a builder with all current selections removed.

#### Returns [#returns-9]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `unknown`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-clearwhere" />

### clearWhere() [#clearwhere]

```ts
clearWhere(): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Returns a builder with the `WHERE` predicate removed.

#### Returns [#returns-10]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-compile" />

### compile() [#compile]

```ts
compile(): CompiledQuery<O>;
```

Compiles the current operation tree into a `CompiledQuery`.

#### Returns [#returns-11]

[`CompiledQuery`](/docs/core/reference/api/interfaces/CompiledQuery)\<`O`>

***

<a id="api-execute" />

### execute() [#execute]

```ts
execute(options?): Promise<readonly O[]>;
```

Compiles and executes the query with the configured executor.

#### Parameters [#parameters-2]

| Parameter  | Type                                                                                 |
| ---------- | ------------------------------------------------------------------------------------ |
| `options?` | [`AbortableQueryOptions`](/docs/core/reference/api/interfaces/AbortableQueryOptions) |

#### Returns [#returns-12]

`Promise`\<readonly `O`\[]>

***

<a id="api-executetakefirst" />

### executeTakeFirst() [#executetakefirst]

```ts
executeTakeFirst(options?): Promise<O | undefined>;
```

Executes the query and returns the first row, or `undefined` when no rows match.

#### Parameters [#parameters-3]

| Parameter  | Type                                                                                 |
| ---------- | ------------------------------------------------------------------------------------ |
| `options?` | [`AbortableQueryOptions`](/docs/core/reference/api/interfaces/AbortableQueryOptions) |

#### Returns [#returns-13]

`Promise`\<`O` | `undefined`>

***

<a id="api-executetakefirstorthrow" />

### executeTakeFirstOrThrow() [#executetakefirstorthrow]

```ts
executeTakeFirstOrThrow(options?): Promise<O>;
```

Executes the query and returns the first row, throwing when no rows match.

#### Parameters [#parameters-4]

| Parameter  | Type                                                                                                                                                                                                                               |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `options?` | \| [`ExecuteTakeFirstOrThrowOptions`](/docs/core/reference/api/interfaces/ExecuteTakeFirstOrThrowOptions) \| [`NoResultErrorConstructor`](/docs/core/reference/api/type-aliases/NoResultErrorConstructor) \| ((`node`) => `Error`) |

#### Returns [#returns-14]

`Promise`\<`O`>

***

<a id="api-executeall" />

### executeAll() [#executeall]

```ts
executeAll(options?): Promise<readonly O[]>;
```

Executes with the executor's Salesforce query-all semantics.

#### Parameters [#parameters-5]

| Parameter  | Type                                                                                 |
| ---------- | ------------------------------------------------------------------------------------ |
| `options?` | [`AbortableQueryOptions`](/docs/core/reference/api/interfaces/AbortableQueryOptions) |

#### Returns [#returns-15]

`Promise`\<readonly `O`\[]>

***

<a id="api-apex" />

### apex() [#apex]

```ts
apex(): ApexAggregateSelectQueryBuilder<DB, TB, O, "static">;
```

Switches to the static Apex builder for the current query.

#### Returns [#returns-16]

[`ApexAggregateSelectQueryBuilder`](/docs/core/reference/api/interfaces/ApexAggregateSelectQueryBuilder)\<`DB`, `TB`, `O`, `"static"`>

***

<a id="api-dynamicapex" />

### dynamicApex() [#dynamicapex]

```ts
dynamicApex(): ApexAggregateSelectQueryBuilder<DB, TB, O, "dynamic">;
```

Switches to the dynamic Apex builder for the current query.

#### Returns [#returns-17]

[`ApexAggregateSelectQueryBuilder`](/docs/core/reference/api/interfaces/ApexAggregateSelectQueryBuilder)\<`DB`, `TB`, `O`, `"dynamic"`>

***

<a id="api-forview" />

### forView() [#forview]

```ts
forView(..._mruCheck): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds `FOR VIEW`; available only for MRU-enabled objects.

#### Parameters [#parameters-6]

| Parameter      | Type                                                                                                                                                                  |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ...`_mruCheck` | [`SalesforceObjectMruEnabled`](/docs/core/reference/api/type-aliases/SalesforceObjectMruEnabled)\<`DB`\[`TB`]> *extends* `false` ? readonly \[`never`] : readonly \[] |

#### Returns [#returns-18]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-forreference" />

### forReference() [#forreference]

```ts
forReference(..._mruCheck): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds `FOR REFERENCE`; available only for MRU-enabled objects.

#### Parameters [#parameters-7]

| Parameter      | Type                                                                                                                                                                  |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ...`_mruCheck` | [`SalesforceObjectMruEnabled`](/docs/core/reference/api/type-aliases/SalesforceObjectMruEnabled)\<`DB`\[`TB`]> *extends* `false` ? readonly \[`never`] : readonly \[] |

#### Returns [#returns-19]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-updatetracking" />

### updateTracking() [#updatetracking]

```ts
updateTracking(..._knowledgeArticleCheck): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds the KnowledgeArticle `UPDATE TRACKING` clause.

#### Parameters [#parameters-8]

| Parameter                   | Type                                 |
| --------------------------- | ------------------------------------ |
| ...`_knowledgeArticleCheck` | `KnowledgeArticleUpdateCheck`\<`TB`> |

#### Returns [#returns-20]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-updateviewstat" />

### updateViewstat() [#updateviewstat]

```ts
updateViewstat(..._knowledgeArticleCheck): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds the KnowledgeArticle `UPDATE VIEWSTAT` clause.

#### Parameters [#parameters-9]

| Parameter                   | Type                                 |
| --------------------------- | ------------------------------------ |
| ...`_knowledgeArticleCheck` | `KnowledgeArticleUpdateCheck`\<`TB`> |

#### Returns [#returns-21]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-usingscope" />

### usingScope() [#usingscope]

```ts
usingScope(scope): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a Salesforce `USING SCOPE` clause validated against schema metadata.

#### Parameters [#parameters-10]

| Parameter | Type                                                                                                                   |
| --------- | ---------------------------------------------------------------------------------------------------------------------- |
| `scope`   | [`SalesforceObjectSupportedScope`](/docs/core/reference/api/type-aliases/SalesforceObjectSupportedScope)\<`DB`\[`TB`]> |

#### Returns [#returns-22]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-withuserid" />

### withUserId() [#withuserid]

```ts
withUserId(userId, ..._userProfileFeedCheck): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds the UserProfileFeed `WITH USER_ID` clause.

#### Parameters [#parameters-11]

| Parameter                  | Type                                    |
| -------------------------- | --------------------------------------- |
| `userId`                   | `string`                                |
| ...`_userProfileFeedCheck` | `UserProfileFeedWithUserIdCheck`\<`TB`> |

#### Returns [#returns-23]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-withrecordvisibilitycontext" />

### withRecordVisibilityContext() [#withrecordvisibilitycontext]

```ts
withRecordVisibilityContext(parameters): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds `WITH RECORD_VISIBILITY_CONTEXT` options.

#### Parameters [#parameters-12]

| Parameter    | Type                                                                                                     |
| ------------ | -------------------------------------------------------------------------------------------------------- |
| `parameters` | [`RecordVisibilityContextOptions`](/docs/core/reference/api/type-aliases/RecordVisibilityContextOptions) |

#### Returns [#returns-24]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-setoptions" />

### setOptions() [#setoptions]

```ts
setOptions(options): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds object-specific Salesforce `SET OPTIONS` values.

#### Parameters [#parameters-13]

| Parameter | Type                                                                                                                 |
| --------- | -------------------------------------------------------------------------------------------------------------------- |
| `options` | [`Data360AggregateSetOptionsFor`](/docs/core/reference/api/type-aliases/Data360AggregateSetOptionsFor)\<`DB`\[`TB`]> |

#### Returns [#returns-25]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-withdatacategory" />

### withDataCategory() [#withdatacategory]

```ts
withDataCategory<Group>(
   group,
   selector,
   categories
): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `WITH DATA CATEGORY` filter.

#### Type Parameters [#type-parameters-6]

| Type Parameter            |
| ------------------------- |
| `Group` *extends* `never` |

#### Parameters [#parameters-14]

| Parameter    | Type                                                                                                                                                                                                         |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `group`      | `Group`                                                                                                                                                                                                      |
| `selector`   | [`DataCategorySelector`](/docs/core/reference/api/type-aliases/DataCategorySelector)                                                                                                                         |
| `categories` | [`DataCategoryInput`](/docs/core/reference/api/type-aliases/DataCategoryInput)\<[`SalesforceObjectDataCategory`](/docs/core/reference/api/type-aliases/SalesforceObjectDataCategory)\<`DB`\[`TB`], `Group`>> |

#### Returns [#returns-26]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-groupby" />

### groupBy() [#groupby]

#### Call Signature [#call-signature]

```ts
groupBy<GE>(field): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy | GE, NextGroupMode<GroupMode, "ordinary">, AdvancedFieldCount>;
```

Adds a `GROUP BY` expression and enters aggregate-query mode.

##### Type Parameters [#type-parameters-7]

| Type Parameter          |
| ----------------------- |
| `GE` *extends* `string` |

##### Parameters [#parameters-15]

| Parameter | Type                                                                                        |
| --------- | ------------------------------------------------------------------------------------------- |
| `field`   | `GroupModeOnly`\<`GroupMode`, `"ordinary"`, `GE` & `GroupableFieldName`\<`DB`, `TB`, `GE`>> |

##### Returns [#returns-27]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy` | `GE`, `NextGroupMode`\<`GroupMode`, `"ordinary"`>, `AdvancedFieldCount`>

#### Call Signature [#call-signature-1]

```ts
groupBy<Expression>(expression): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy | DateFunctionIdentityOf<Expression>, NextGroupMode<GroupMode, "ordinary">, AdvancedFieldCount>;
```

Adds a `GROUP BY` expression and enters aggregate-query mode.

##### Type Parameters [#type-parameters-8]

| Type Parameter                                                                                                                                                                                                                   |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Expression` *extends* [`DateFunctionExpression`](/docs/core/reference/api/interfaces/DateFunctionExpression)\<`unknown`, `unknown`, [`ComparisonOperator`](/docs/core/reference/api/type-aliases/ComparisonOperator), `string`> |

##### Parameters [#parameters-16]

| Parameter    | Type                                                                |
| ------------ | ------------------------------------------------------------------- |
| `expression` | `GroupModeOnly`\<`GroupMode`, `"ordinary"`, (`eb`) => `Expression`> |

##### Returns [#returns-28]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy` | `DateFunctionIdentityOf`\<`Expression`>, `NextGroupMode`\<`GroupMode`, `"ordinary"`>, `AdvancedFieldCount`>

#### Call Signature [#call-signature-2]

```ts
groupBy<GE>(fields): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy | GE, NextGroupMode<GroupMode, "ordinary">, AdvancedFieldCount>;
```

Adds a `GROUP BY` expression and enters aggregate-query mode.

##### Type Parameters [#type-parameters-9]

| Type Parameter          |
| ----------------------- |
| `GE` *extends* `string` |

##### Parameters [#parameters-17]

| Parameter | Type                                                                                                    |
| --------- | ------------------------------------------------------------------------------------------------------- |
| `fields`  | `GroupModeOnly`\<`GroupMode`, `"ordinary"`, readonly `GE` & `GroupableFieldName`\<`DB`, `TB`, `GE`>\[]> |

##### Returns [#returns-29]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy` | `GE`, `NextGroupMode`\<`GroupMode`, `"ordinary"`>, `AdvancedFieldCount`>

***

<a id="api-groupbyrollup" />

### groupByRollup() [#groupbyrollup]

```ts
groupByRollup<Input>(fields): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy | AdvancedGroupByField<Input>, NextGroupMode<GroupMode, "rollup">, AddAdvancedGroupFieldCount<AdvancedFieldCount, AdvancedGroupByInputCount<Input>>>;
```

Adds a `GROUP BY ROLLUP` expression.

#### Type Parameters [#type-parameters-10]

| Type Parameter                           |
| ---------------------------------------- |
| `Input` *extends* `AdvancedGroupByInput` |

#### Parameters [#parameters-18]

| Parameter | Type                                                                                                             |
| --------- | ---------------------------------------------------------------------------------------------------------------- |
| `fields`  | `GroupModeOnly`\<`GroupMode`, `"rollup"`, `AdvancedGroupByArgument`\<`DB`, `TB`, `AdvancedFieldCount`, `Input`>> |

#### Returns [#returns-30]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy` | `AdvancedGroupByField`\<`Input`>, `NextGroupMode`\<`GroupMode`, `"rollup"`>, `AddAdvancedGroupFieldCount`\<`AdvancedFieldCount`, `AdvancedGroupByInputCount`\<`Input`>>>

***

<a id="api-groupbycube" />

### groupByCube() [#groupbycube]

```ts
groupByCube<Input>(fields): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy | AdvancedGroupByField<Input>, NextGroupMode<GroupMode, "cube">, AddAdvancedGroupFieldCount<AdvancedFieldCount, AdvancedGroupByInputCount<Input>>>;
```

Adds a `GROUP BY CUBE` expression.

#### Type Parameters [#type-parameters-11]

| Type Parameter                           |
| ---------------------------------------- |
| `Input` *extends* `AdvancedGroupByInput` |

#### Parameters [#parameters-19]

| Parameter | Type                                                                                                           |
| --------- | -------------------------------------------------------------------------------------------------------------- |
| `fields`  | `GroupModeOnly`\<`GroupMode`, `"cube"`, `AdvancedGroupByArgument`\<`DB`, `TB`, `AdvancedFieldCount`, `Input`>> |

#### Returns [#returns-31]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy` | `AdvancedGroupByField`\<`Input`>, `NextGroupMode`\<`GroupMode`, `"cube"`>, `AddAdvancedGroupFieldCount`\<`AdvancedFieldCount`, `AdvancedGroupByInputCount`\<`Input`>>>

***

<a id="api-having" />

### having() [#having]

#### Call Signature [#call-signature-3]

```ts
having(expression): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `HAVING` predicate to the aggregate query.

##### Parameters [#parameters-20]

| Parameter    | Type                                                                                                            |
| ------------ | --------------------------------------------------------------------------------------------------------------- |
| `expression` | `GroupedOnly`\<`GroupedBy`, [`SoqlRawBuilder`](/docs/core/reference/api/interfaces/SoqlRawBuilder)\<`unknown`>> |

##### Returns [#returns-32]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-4]

```ts
having(expression): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `HAVING` predicate to the aggregate query.

##### Parameters [#parameters-21]

| Parameter    | Type                                                                                                                                                                                                   |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `expression` | `GroupedOnly`\<`GroupedBy`, [`HavingExpressionFactory`](/docs/core/reference/api/type-aliases/HavingExpressionFactory)\<`DB`, `TB`, `GroupedBy`, `AdvancedGroupingFields`\<`GroupedBy`, `GroupMode`>>> |

##### Returns [#returns-33]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-5]

```ts
having<RE, OP, RHS>(
   lhs,
   op,
   rhs
): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `HAVING` predicate to the aggregate query.

##### Type Parameters [#type-parameters-12]

| Type Parameter                                                                                                                                                                                                                                                                    |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `RE` *extends* `string`                                                                                                                                                                                                                                                           |
| `OP` *extends* \| `"="` \| `"!="` \| [`OrderedComparisonOperator`](/docs/core/reference/api/type-aliases/OrderedComparisonOperator) \| `"in"` \| `"not in"` \| [`MultiSelectComparisonOperator`](/docs/core/reference/api/type-aliases/MultiSelectComparisonOperator) \| `"like"` |
| `RHS`                                                                                                                                                                                                                                                                             |

##### Parameters [#parameters-22]

| Parameter | Type                                                                                                                                                         |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `lhs`     | `RE` & `GroupedOnly`\<`GroupedBy`, [`GroupedHavingFieldName`](/docs/core/reference/api/type-aliases/GroupedHavingFieldName)\<`DB`, `TB`, `GroupedBy`, `RE`>> |
| `op`      | `OP`                                                                                                                                                         |
| `rhs`     | `RHS`                                                                                                                                                        |

##### Returns [#returns-34]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-limit" />

### limit() [#limit]

```ts
limit(limit): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds or replaces the SOQL `LIMIT` clause.

#### Parameters [#parameters-23]

| Parameter | Type                                  |
| --------- | ------------------------------------- |
| `limit`   | `GroupedOnly`\<`GroupedBy`, `number`> |

#### Returns [#returns-35]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-offset" />

### offset() [#offset]

```ts
offset(offset): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds or replaces the SOQL `OFFSET` clause.

#### Parameters [#parameters-24]

| Parameter | Type                                  |
| --------- | ------------------------------------- |
| `offset`  | `GroupedOnly`\<`GroupedBy`, `number`> |

#### Returns [#returns-36]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-orderby" />

### orderBy() [#orderby]

#### Call Signature [#call-signature-6]

```ts
orderBy(
   expression,
   direction?,
   nulls?
): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `ORDER BY` item.

##### Parameters [#parameters-25]

| Parameter    | Type                                                                                                            |
| ------------ | --------------------------------------------------------------------------------------------------------------- |
| `expression` | `GroupedOnly`\<`GroupedBy`, [`SoqlRawBuilder`](/docs/core/reference/api/interfaces/SoqlRawBuilder)\<`unknown`>> |
| `direction?` | [`OrderByDirection`](/docs/core/reference/api/type-aliases/OrderByDirection)                                    |
| `nulls?`     | [`OrderByNulls`](/docs/core/reference/api/type-aliases/OrderByNulls)                                            |

##### Returns [#returns-37]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-7]

```ts
orderBy<OE>(
   field,
   direction?,
   nulls?
): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `ORDER BY` item.

##### Type Parameters [#type-parameters-13]

| Type Parameter          |
| ----------------------- |
| `OE` *extends* `string` |

##### Parameters [#parameters-26]

| Parameter    | Type                                                                                           |
| ------------ | ---------------------------------------------------------------------------------------------- |
| `field`      | `OE` & `GroupedOnly`\<`GroupedBy`, `GroupedSortableFieldName`\<`DB`, `TB`, `GroupedBy`, `OE`>> |
| `direction?` | [`OrderByDirection`](/docs/core/reference/api/type-aliases/OrderByDirection)                   |
| `nulls?`     | `OrderByNullsForReference`\<`DB`, `TB`, `OE`>                                                  |

##### Returns [#returns-38]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-8]

```ts
orderBy(expression, direction?): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `ORDER BY` item.

##### Parameters [#parameters-27]

| Parameter    | Type                                                                                               |
| ------------ | -------------------------------------------------------------------------------------------------- |
| `expression` | `AdvancedGroupingOnly`\<`GroupMode`, `GroupingOrderByExpressionFactory`\<`DB`, `TB`, `GroupedBy`>> |
| `direction?` | [`OrderByDirection`](/docs/core/reference/api/type-aliases/OrderByDirection)                       |

##### Returns [#returns-39]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-9]

```ts
orderBy<Output, Value, Operator>(
   expression,
   direction?,
   nulls?
): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `ORDER BY` item.

##### Type Parameters [#type-parameters-14]

| Type Parameter                                                                                        |
| ----------------------------------------------------------------------------------------------------- |
| `Output`                                                                                              |
| `Value`                                                                                               |
| `Operator` *extends* [`ComparisonOperator`](/docs/core/reference/api/type-aliases/ComparisonOperator) |

##### Parameters [#parameters-28]

| Parameter    | Type                                                                                                                                                              |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `expression` | `GroupedOnly`\<`GroupedBy`, (`eb`) => [`AggregateFunctionBuilder`](/docs/core/reference/api/interfaces/AggregateFunctionBuilder)\<`Output`, `Value`, `Operator`>> |
| `direction?` | [`OrderByDirection`](/docs/core/reference/api/type-aliases/OrderByDirection)                                                                                      |
| `nulls?`     | [`OrderByNulls`](/docs/core/reference/api/type-aliases/OrderByNulls)                                                                                              |

##### Returns [#returns-40]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-10]

```ts
orderBy<Output, Value, Operator, Identity>(expression, direction?): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `ORDER BY` item.

##### Type Parameters [#type-parameters-15]

| Type Parameter                                                                                        |
| ----------------------------------------------------------------------------------------------------- |
| `Output`                                                                                              |
| `Value`                                                                                               |
| `Operator` *extends* [`ComparisonOperator`](/docs/core/reference/api/type-aliases/ComparisonOperator) |
| `Identity` *extends* `string`                                                                         |

##### Parameters [#parameters-29]

| Parameter    | Type                                                                                                                                                                      |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `expression` | `GroupedOnly`\<`GroupedBy`, (`eb`) => [`DateFunctionExpression`](/docs/core/reference/api/interfaces/DateFunctionExpression)\<`Output`, `Value`, `Operator`, `Identity`>> |
| `direction?` | [`OrderByDirection`](/docs/core/reference/api/type-aliases/OrderByDirection)                                                                                              |

##### Returns [#returns-41]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-select" />

### select() [#select]

#### Call Signature [#call-signature-11]

```ts
select<RawOutput>(selection): AggregateSelectQueryBuilder<DB, TB, O & RawOutput, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds one or more typed selections to the query output.

##### Type Parameters [#type-parameters-16]

| Type Parameter |
| -------------- |
| `RawOutput`    |

##### Parameters [#parameters-30]

| Parameter   | Type                                                                                 |
| ----------- | ------------------------------------------------------------------------------------ |
| `selection` | [`SoqlRawBuilder`](/docs/core/reference/api/interfaces/SoqlRawBuilder)\<`RawOutput`> |

##### Returns [#returns-42]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O` & `RawOutput`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-12]

```ts
select<Aggregate>(selection): AggregateSelectQueryBuilder<DB, TB, O & AggregateSelection<Aggregate>, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds one or more typed selections to the query output.

##### Type Parameters [#type-parameters-17]

| Type Parameter                                |
| --------------------------------------------- |
| `Aggregate` *extends* `AggregateSelectionArg` |

##### Parameters [#parameters-31]

| Parameter   | Type                  |
| ----------- | --------------------- |
| `selection` | (`eb`) => `Aggregate` |

##### Returns [#returns-43]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O` & `AggregateSelection`\<`Aggregate`>, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-13]

```ts
select<Selection>(selection): AggregateSelectQueryBuilder<DB, TB, O & AggregateSelection<Selection>, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds one or more typed selections to the query output.

##### Type Parameters [#type-parameters-18]

| Type Parameter                              |
| ------------------------------------------- |
| `Selection` *extends* `GroupedSelectionArg` |

##### Parameters [#parameters-32]

| Parameter   | Type                                                                                                   |
| ----------- | ------------------------------------------------------------------------------------------------------ |
| `selection` | (`eb`) => `Selection` & `GroupedFunctionSelection`\<`DB`, `TB`, `Selection`, `GroupedBy`, `GroupMode`> |

##### Returns [#returns-44]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O` & `AggregateSelection`\<`Selection`>, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-14]

```ts
select<Selections>(selections): AggregateSelectQueryBuilder<DB, TB, O & DrainOuterGeneric<{ [K in string]: ({ readonly [Field in string]: (GroupMode extends AdvancedGroupByMode ? true : false) extends true ? SalesforceFieldValue<FieldDefinition<(...), (...), (...)>> | null : SalesforceFieldValue<FieldDefinition<DB, TB, Field>> } & ParentSelection<DB, TB, Exclude<Selections[number], `${string} as ${string}`>, GroupMode extends AdvancedGroupByMode ? true : false> & AliasedSelection<DB, TB, Selections[number], GroupMode extends AdvancedGroupByMode ? true : false>)[K] }>, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds one or more typed selections to the query output.

##### Type Parameters [#type-parameters-19]

| Type Parameter                              |
| ------------------------------------------- |
| `Selections` *extends* readonly `string`\[] |

##### Parameters [#parameters-33]

| Parameter    | Type                                                                                 |
| ------------ | ------------------------------------------------------------------------------------ |
| `selections` | `Selections` & `GroupedSelectExpressionList`\<`DB`, `TB`, `GroupedBy`, `Selections`> |

##### Returns [#returns-45]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O` & `DrainOuterGeneric`\<\{ \[K in string]: (\{ readonly \[Field in string]: (GroupMode extends AdvancedGroupByMode ? true : false) extends true ? SalesforceFieldValue\<FieldDefinition\<(...), (...), (...)>> | null : SalesforceFieldValue\<FieldDefinition\<DB, TB, Field>> } & ParentSelection\<DB, TB, Exclude\<Selections\[number], \`$\{string} as $\{string}\`>, GroupMode extends AdvancedGroupByMode ? true : false> & AliasedSelection\<DB, TB, Selections\[number], GroupMode extends AdvancedGroupByMode ? true : false>)\[K] }>, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-15]

```ts
select<SE>(selection): AggregateSelectQueryBuilder<DB, TB, O & DrainOuterGeneric<{ [K in string]: ({ readonly [Field in string]: (GroupMode extends AdvancedGroupByMode ? true : false) extends true ? SalesforceFieldValue<FieldDefinition<(...), (...), (...)>> | null : SalesforceFieldValue<FieldDefinition<DB, TB, Field>> } & ParentSelection<DB, TB, Exclude<SE, `${string} as ${string}`>, GroupMode extends AdvancedGroupByMode ? true : false> & AliasedSelection<DB, TB, SE, GroupMode extends AdvancedGroupByMode ? true : false>)[K] }>, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds one or more typed selections to the query output.

##### Type Parameters [#type-parameters-20]

| Type Parameter          |
| ----------------------- |
| `SE` *extends* `string` |

##### Parameters [#parameters-34]

| Parameter   | Type                                                             |
| ----------- | ---------------------------------------------------------------- |
| `selection` | `SE` & `GroupedSelectExpression`\<`DB`, `TB`, `GroupedBy`, `SE`> |

##### Returns [#returns-46]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O` & `DrainOuterGeneric`\<\{ \[K in string]: (\{ readonly \[Field in string]: (GroupMode extends AdvancedGroupByMode ? true : false) extends true ? SalesforceFieldValue\<FieldDefinition\<(...), (...), (...)>> | null : SalesforceFieldValue\<FieldDefinition\<DB, TB, Field>> } & ParentSelection\<DB, TB, Exclude\<SE, \`$\{string} as $\{string}\`>, GroupMode extends AdvancedGroupByMode ? true : false> & AliasedSelection\<DB, TB, SE, GroupMode extends AdvancedGroupByMode ? true : false>)\[K] }>, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-where" />

### where() [#where]

#### Call Signature [#call-signature-16]

```ts
where(expression): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `WHERE` predicate and combines it with any existing predicate using `AND`.

##### Parameters [#parameters-35]

| Parameter    | Type                                                                   |
| ------------ | ---------------------------------------------------------------------- |
| `expression` | [`SoqlRawBuilder`](/docs/core/reference/api/interfaces/SoqlRawBuilder) |

##### Returns [#returns-47]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-17]

```ts
where(expression): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `WHERE` predicate and combines it with any existing predicate using `AND`.

##### Parameters [#parameters-36]

| Parameter    | Type                                                                                                  |
| ------------ | ----------------------------------------------------------------------------------------------------- |
| `expression` | [`WhereExpressionFactory`](/docs/core/reference/api/type-aliases/WhereExpressionFactory)\<`DB`, `TB`> |

##### Returns [#returns-48]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

#### Call Signature [#call-signature-18]

```ts
where<RE, OP, RHS>(
   lhs,
   op,
   rhs
): AggregateSelectQueryBuilder<DB, TB, O, GroupedBy, GroupMode, AdvancedFieldCount>;
```

Adds a typed `WHERE` predicate and combines it with any existing predicate using `AND`.

##### Type Parameters [#type-parameters-21]

| Type Parameter                                                                                                                                                                                                                                                                    |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `RE` *extends* `string`                                                                                                                                                                                                                                                           |
| `OP` *extends* \| `"="` \| `"!="` \| [`OrderedComparisonOperator`](/docs/core/reference/api/type-aliases/OrderedComparisonOperator) \| `"in"` \| `"not in"` \| [`MultiSelectComparisonOperator`](/docs/core/reference/api/type-aliases/MultiSelectComparisonOperator) \| `"like"` |
| `RHS`                                                                                                                                                                                                                                                                             |

##### Parameters [#parameters-37]

| Parameter | Type                                            |
| --------- | ----------------------------------------------- |
| `lhs`     | `RE` & `FilterableFieldName`\<`DB`, `TB`, `RE`> |
| `op`      | `OP`                                            |
| `rhs`     | `RHS`                                           |

##### Returns [#returns-49]

`AggregateSelectQueryBuilder`\<`DB`, `TB`, `O`, `GroupedBy`, `GroupMode`, `AdvancedFieldCount`>

***

<a id="api-tooperationnode" />

### toOperationNode() [#tooperationnode]

```ts
toOperationNode(): SelectQueryNode;
```

Returns the immutable operation node represented by this builder.

#### Returns [#returns-50]

[`SelectQueryNode`](/docs/core/reference/api/type-aliases/SelectQueryNode)
