> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bijection.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Class: ViewQuery<Plan>

> A declarative relation.

[server](/api/modules/server).ViewQuery

A declarative relation. Construct this with q.table, never with a database callback.

## Type parameters

| Name |
| :- |
| `Plan` |

## Constructors

### constructor

• **new ViewQuery**\<`Plan`>(`plan`)

#### Type parameters

| Name |
| :- |
| `Plan` |

#### Parameters

| Name | Type |
| :- | :- |
| `plan` | [`ViewPlan`](/api/modules/server#viewplan) |

## Properties

### planType

• `Readonly` **planType**: `Plan`

***

### plan

• `Readonly` **plan**: [`ViewPlan`](/api/modules/server#viewplan)

## Methods

### as

▸ **as**\<`Name`>(`alias`): [`ViewQuery`](/api/classes/server.ViewQuery)\<`Alias`\<`Plan`, `Name`>>

#### Type parameters

| Name | Type |
| :- | :- |
| `Name` | extends `string` |

#### Parameters

| Name | Type |
| :- | :- |
| `alias` | `Name` |

#### Returns

[`ViewQuery`](/api/classes/server.ViewQuery)\<`Alias`\<`Plan`, `Name`>>

***

### filter

▸ **filter**(`predicate`): [`ViewQuery`](/api/classes/server.ViewQuery)\<`Plan`>

#### Parameters

| Name | Type |
| :- | :- |
| `predicate` | [`Expression`](/api/classes/server.Expression)\<`boolean`> |

#### Returns

[`ViewQuery`](/api/classes/server.ViewQuery)\<`Plan`>

***

### select

▸ **select**\<`Fields`>(`fields`): [`ViewQuery`](/api/classes/server.ViewQuery)\<`Select`\<`Plan`, `Fields`>>

#### Type parameters

| Name | Type |
| :- | :- |
| `Fields` | extends `Selection` |

#### Parameters

| Name | Type |
| :- | :- |
| `fields` | `Fields` |

#### Returns

[`ViewQuery`](/api/classes/server.ViewQuery)\<`Select`\<`Plan`, `Fields`>>

***

### leftJoin

▸ **leftJoin**\<`Right`>(`right`, `options`): [`ViewQuery`](/api/classes/server.ViewQuery)\<`Join`\<`Plan`, `Right`, `"left"`>>

#### Type parameters

| Name |
| :- |
| `Right` |

#### Parameters

| Name | Type |
| :- | :- |
| `right` | [`ViewQuery`](/api/classes/server.ViewQuery)\<`Right`> |
| `options` | [`ViewJoinOptions`](/api/modules/server#viewjoinoptions) |

#### Returns

[`ViewQuery`](/api/classes/server.ViewQuery)\<`Join`\<`Plan`, `Right`, `"left"`>>

***

### innerJoin

▸ **innerJoin**\<`Right`>(`right`, `options`): [`ViewQuery`](/api/classes/server.ViewQuery)\<`Join`\<`Plan`, `Right`, `"inner"`>>

#### Type parameters

| Name |
| :- |
| `Right` |

#### Parameters

| Name | Type |
| :- | :- |
| `right` | [`ViewQuery`](/api/classes/server.ViewQuery)\<`Right`> |
| `options` | [`ViewJoinOptions`](/api/modules/server#viewjoinoptions) |

#### Returns

[`ViewQuery`](/api/classes/server.ViewQuery)\<`Join`\<`Plan`, `Right`, `"inner"`>>

***

### groupBy

▸ **groupBy**\<`Fields`>(`fields`, `window?`): `Object`

#### Type parameters

| Name | Type |
| :- | :- |
| `Fields` | extends readonly `string`\[] |

#### Parameters

| Name | Type |
| :- | :- |
| `fields` | `Fields` |
| `window?` | [`ViewWindow`](/api/modules/server#viewwindow) |

#### Returns

`Object`

| Name | Type |
| :- | :- |
| `aggregate` | \<Aggregates>(`aggregates`: `Aggregates`) => [`ViewQuery`](/api/classes/server.ViewQuery)\<`Group`\<`Plan`, `Fields`, `Aggregates`>> |
