如何向 Sequelize 函数添加 where 子句?

How to add a where clause to Sequelize functions?

我正在尝试使用聚合函数从 table 中使用多个不同的 where 子句提取多个不同的总和。 我正在尝试做这样的事情:

model.findAll({
  attributes:[
    [sequelize.fn('sum', sequelize.col('columnA')), 'sumA1'], // need to add where:{condition1}
    [sequelize.fn('sum', sequelize.col('columnB')), 'sumB1'], // need to add where:{condition1}
    [sequelize.fn('sum', sequelize.col('columnA')), 'sumA2'], // need to add where:{condition2}
    [sequelize.fn('sum', sequelize.col('columnB')), 'sumB2'], // need to add where:{condition2}
    ...
  ]
)}

到目前为止,我已经设法使用 Promise.all 并为每个“where 子句条件”对数据库进行不同的调用或从 table 获取所有数据并使用节点来完成这项工作计算总和。使用 sequelize 有更好的方法吗?

如果您更喜欢文字方式,那么使用子查询 where

会很简单
model.findAll({
  limit: 1,
  attributes:[
    [sequelize.literal(`(select sum(columnA) from table where date = '2021-01-05')`), 'testSum'],
    ...and so on
  ]
})

你从基本的 SQL 概念中看到你需要执行的事情是子查询或使用 window 的 over() 子句在任何一种情况下你都需要先有一个原始查询然后尝试将其转换为 sequelize 语法。