使用聚合函数时,Sequelize 获取另一列的数据

Bla*_*ack 5 sql-server node.js sequelize.js

我正在尝试在Express应用程序中使用Sequelize获取数据,并且使用SQL Server作为数据库。

这是我的代码:

Order.findAll({
    attributes:[
        [Sequelize.fn('SUM', Sequelize.col('total_price')), 'total_price'],
    ],
    include:[
        {model: Customer, attributes:['name']}
    ],
    group:['Customer.id','Customer.name']
}).then(result =>res.json(result))
Run Code Online (Sandbox Code Playgroud)

这段代码运行良好,并成功使用聚合函数返回数据。但是当我添加另一个'product_id', 'status', 'expired_date'不需要聚合的属性时,它会返回一个错误,例如

列“Customer.product_id”在选择列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中。

根据这篇文章,它只能获取 GROUP BY 列表中的列。

但如何获得添加的属性和聚合结果呢?喜欢:

{
     'total_price': 2000,
     'name': 'Jack',
     'status': 'Paid'
}
Run Code Online (Sandbox Code Playgroud)

应该做 2 在函数中获取数据,就像首先获取聚合,然后获取另一个数据。我担心有可能返回不相关的数据。

Bla*_*ack 3

我刚刚找到了一种方法来做到这一点,我只添加了我想要进入group_by子句的属性/列。像这样:

Order.findAll({
attributes:[
    'product_id', 'status', 'expired_date',
    [Sequelize.fn('SUM', Sequelize.col('total_price')), 'total_price'],
],
include:[
    {model: Customer, attributes:['name']}
],
group:['Customer.id','Customer.name','Order.product_id', 'Order.status', 'Order.expired_date']
}).then(result =>res.json(result))
Run Code Online (Sandbox Code Playgroud)

它成功返回了我的预期结果。但不知道这样做有什么考虑吗?谢谢