首页 > 解决方案 > Sequelize js 无法与 Have 和 Group by 一起按预期工作

问题描述

我的 ORM 查询有问题吗?我正在尝试使用 sequelizegrouphaving过滤具有 30 条以上记录的预订日期:

SELECT "reservations"."reservationDate" FROM reservations, orders
WHERE "reservations"."orderId" = "orders"."orderId"
AND Orders.confirmed = true
GROUP BY "reservationDate"
HAVING COUNT("reservationDate") >= 30;
    db.Reservations.findAll({
      attributes: ['reservationDate'],
      where: {
        reservationDate: {
          [Sequelize.Op.between]: [fistMonthDay, lastMonthDay],
        },
      },
      include: [{
        model: db.Orders,
        attributes: [],
        where: { confirmed: true }
      }],
      group: ['reservationDate'],
      having: {
        [Sequelize.fn("COUNT", Sequelize.col("reservationId"))]: {
          [Sequelize.Op.gte]: 30,
        }
      }

    })

标签: node.jspostgresqlexpressormsequelize.js

解决方案


简单的解决方法:

having: Sequelize.literal(`count("reservation"."reservationId") >= 30`)

推荐阅读