Aggregate & Group
The following uses the module test-vona as an example to explain the usage of aggregate and group
count
typescript
class ServicePost {
async count() {
return await this.scope.model.post.count();
}
}- Params
| Name | Description |
|---|---|
| column | The column to be counted |
| distinct | Whether to enable distinct |
| where | Conditional statement |
| joins | Related tables |
Aggregate
typescript
class ServicePost {
async aggregate() {
const result = await this.scope.model.post.aggregate({
aggrs: {
count: ['*', 'stars'],
sum: 'stars',
avg: 'stars',
min: 'stars',
max: 'stars',
},
});
return result;
}
}Vona ORM automatically infers the type of result from the aggrs parameter

- Params
| Name | Description |
|---|---|
| aggrs | The functions and columns to be aggregated. Functions: count/sum/avg/min/max. Columns: string/string[] |
| distinct | Whether to enable distinct |
| where | Conditional statement |
| joins | Related tables |
Group
typescript
class ServicePost {
async group() {
const result = await this.scope.model.post.group({
groups: 'userId',
aggrs: {
count: '*',
sum: 'stars',
},
});
return result;
}
}Vona ORM automatically infers the type of result from the parameters groups and aggrs

- Params
| Name | Description |
|---|---|
| groups | The groups to be grouped: string/string[] |
| columns | The group columns to be displayed. If it is empty, the columns specified by the groups parameter will be displayed |
| aggrs | The functions and columns to be aggregated. Functions: count/sum/avg/min/max. Columns: string/string[] |
| distinct | Whether to enable distinct |
| where | Conditional statement |
| joins | Related tables |
| limit | Limit the range of data to be grouped |
| offset | Limit the range of data to be grouped |
| having | Filter the group results |
| orders | Sort the group results |
Example: having
typescript
class ServicePost {
async group() {
const result = await this.scope.model.post.group({
groups: 'userId',
aggrs: {
count: '*',
sum: 'stars',
},
having: {
count_all: {
_gt_: 20,
},
sum_stars: {
_gt_: 30,
_lt_: 50,
},
},
});
return result;
}
}Example: orders
typescript
class ServicePost {
async group() {
const result = await this.scope.model.post.group({
groups: 'userId',
aggrs: {
count: '*',
sum: 'stars',
},
orders: [['count_all', 'desc']],
});
return result;
}
}