Node.js Sequelize with SQL Server返回错误聚合函数或GROUP BY子句,即使我没有使用GROUP BY
我用带有Sequelize和SQL Server的ExpressJs构建了一个应用程序的后端。 我有两个表,叫做User和Order。一个用户有很多订单。 我想列出所有用户,包括他们的orderas计数 这是我的密码:Node.js Sequelize with SQL Server返回错误聚合函数或GROUP BY子句,即使我没有使用GROUP BY,node.js,sql-server,sequelize.js,Node.js,Sql Server,Sequelize.js,我用带有Sequelize和SQL Server的ExpressJs构建了一个应用程序的后端。 我有两个表,叫做User和Order。一个用户有很多订单。 我想列出所有用户,包括他们的orderas计数 这是我的密码: User.findAll({ attributes: ['id'], include: [ { model: ProductBuy, attributes: [ [Se
User.findAll({
attributes: ['id'],
include: [
{
model: ProductBuy,
attributes: [
[Sequelize.fn('COUNT', Sequelize.col('Order.member_id')), 'total_active']
],
where: {status: ['Active', 'Expired']}
}
],
})
但这给了我一个错误
列“User.id”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中
我不明白这一点,因为我还没有使用一个组。
但是如果我添加一个分组,比如
group:['Order.member_id', 'User.id', 'Order.id']
它成功地获取了数据,但订单没有计算在内,它在每个用户中一个接一个地显示每个订单,如下所示:
{
"id": 4,
"orders": [
{
"total_active": 1
},
{
"total_active": 1
}
]
},
我想说的是用户A总共有4个活动,用户B总共有6个活动,就像这样
我如何做到这一点
表结构
使用者
顺序
预期结果
截图结果
如果将计数与其他字段一起使用,则必须使用分组依据
SELECT user_id, COUNT(*)
FROM [Order]
GROUP BY user_id
我认为您可以从ProductBuy中提取属性字段,并像这样使用它:
User.findAll({
attributes: [
'id'
[Sequelize.fn('COUNT', Sequelize.col('Order.member_id')), 'total_active'] // <--- HERE
],
include: [
{
model: ProductBuy,
where: {status: ['Active', 'Expired']}
}
],
group:['User.id', 'Order.id']
})
注:
如果它计数重复记录,您也可以使用DISTINCT like
这个
[Sequelize.fn'COUNT',Sequelize.fn'DISTINCT',Sequelize.col'Order.member\u id','total\u active']
好的,我已经用过这个组了,但是结果不算数。你可以检查上面的结果。试着从GROUP BY和SELECT中删除'order.id',当然也可以从SELECT中删除'order.id'。很抱歉,我以为我没有在SELECT中添加order.id。如果你能给出表格结构,我会尝试编写查询,并将其复制,我的意思是它会逐个返回每个订单。我确实使用了distinct,但它没有区分任何东西。我添加了截图。过来看。Thanks@Blackjack,有问题,请检查我的代码,结果不正确;看起来不像是我的对不起,我的错。我得到的列“Order.product_id”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。顺便说一句,上面的数据库结构只是相互关联的列。product_id是表order中的另一列
{
"data": [
{
"id": 1,
"Orders": [
{
"total_active": 2
}
]
},
{
"id": 2,
"Orders": [
{
"total_active": 1
}
]
},
]
}
SELECT user_id, COUNT(*)
FROM [Order]
GROUP BY user_id
User.findAll({
attributes: [
'id'
[Sequelize.fn('COUNT', Sequelize.col('Order.member_id')), 'total_active'] // <--- HERE
],
include: [
{
model: ProductBuy,
where: {status: ['Active', 'Expired']}
}
],
group:['User.id', 'Order.id']
})