Node.js Sequelize with SQL Server返回错误聚合函数或GROUP BY子句,即使我没有使用GROUP BY

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

我用带有Sequelize和SQL Server的ExpressJs构建了一个应用程序的后端。 我有两个表,叫做User和Order。一个用户有很多订单。 我想列出所有用户,包括他们的orderas计数

这是我的密码:

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']
})