sequelize 联表查询 复杂查询条件 统计个数的案例
时间: 2024-01-01 10:05:26 浏览: 272
下面是一个使用 Sequelize 进行联表查询、复杂查询条件和统计个数的案例:
假设有两个表,一个是用户表(user),一个是订单表(order),用户表和订单表是通过用户id关联的。为了方便说明,我们假设用户表中有一个字段叫做“sex”,表示用户的性别,订单表中有一个字段叫做“amount”,表示订单金额。
我们需要查询出满足以下条件的结果:
1. 查询性别为女性的用户的订单数量
2. 查询性别为女性的用户的订单总金额
3. 查询性别为女性的用户的订单数量和订单总金额,并按照性别分组
首先,我们需要定义用户表和订单表的模型:
```javascript
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'
});
const User = sequelize.define('user', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING
},
sex: {
type: DataTypes.STRING
}
});
const Order = sequelize.define('order', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
amount: {
type: DataTypes.FLOAT
}
});
User.hasMany(Order);
Order.belongsTo(User);
```
然后,我们可以使用 Sequelize 提供的方法进行查询:
```javascript
const result = await User.findAll({
attributes: [
'sex',
[sequelize.fn('COUNT', sequelize.col('orders.id')), 'order_count'],
[sequelize.fn('SUM', sequelize.col('orders.amount')), 'total_amount']
],
include: [
{
model: Order,
attributes: []
}
],
where: {
sex: '女'
},
group: ['sex']
});
```
在上面的查询中,我们使用了 Sequelize 提供的 `findAll` 方法进行查询。其中,`attributes` 属性用于指定查询结果返回的字段,我们使用了 Sequelize 提供的聚合函数 `COUNT` 和 `SUM` 来统计订单数量和订单总金额。`include` 属性用于指定关联查询的表,我们指定了查询用户表时同时查询订单表。`where` 属性用于指定查询条件,我们指定了查询性别为女性的用户。`group` 属性用于指定分组条件,我们指定了按照性别分组。
最后,我们可以得到满足条件的结果:
```javascript
[
{
"sex": "女",
"order_count": 10,
"total_amount": 1000
}
]
```
阅读全文