【问题标题】:How to add a where clause to Sequelize functions?如何在 Sequelize 函数中添加 where 子句?
【发布时间】:2021-11-25 12:26:09
【问题描述】:

我正在尝试使用聚合函数从使用多个不同 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 子句条件”对数据库进行不同的调用,或者从表中获取所有数据并使用节点来计算总和。使用 sequelize 有更好的方法吗?

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

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

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

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

    【讨论】:

    • 我收到一个错误“在“AS”处或附近出现语法错误。使用此方法的原始 sql 如下所示:“SELECT sum(columnA) from table where condition = cond1 AS "sumA1" FROM "表" AS "表";"
    • 你能提供整个错误和你用过的sequlize查询吗?
    • 整个错误太长,无法放在评论中,所以我做了一个 pastebin。我猜问题是因为我在通话中收到了两个“AS”声明。 pastebin.com/svmJmnb7
    • sql:SELECT sum(columnA) from tables where date = '2021-01-05' AS "testSum" FROM "tables" AS "table";,这个SQL查询不正确
    • 检查一次更新的答案!
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2021-09-13
    • 2022-12-19
    • 2019-06-26
    • 2017-07-26
    • 2016-03-29
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多