首页 > 解决方案 > 在 Sequelize 中分组和计数

问题描述

我在 PosGres 中有一个名为 Matches 的表,其中包含 match_name、room_full、game_completed、createdAt 列。我想计算按 createdAt 分组的 room_full 和 game_completed(只有年、月和日,而不是时间)。我有按 created_at 分组的记录,只有年、月和日,但无法获得 room_full 和 game_completed 的计数。这是我的代码。

Match.findAll({paranoid:false,
        where: {
              createdAt: {
                [Op.gte]: moment().subtract(7, 'days').toDate()
              }
            },
        group: [db.sequelize.fn('date_trunc', 'day', db.sequelize.col('createdAt'))]
      })

谁能帮我解决这个问题。我希望它在折线图中表示。先感谢您。

标签: expressgroup-bycountsequelize.js

解决方案


在您的情况下,您应该使用Sequelize 函数

Match.findAll({
  paranoid: false,
  group: [db.sequelize.fn('date_trunc', 'day', db.sequelize.col('createdAt'))],
  attributes: [
    db.sequelize.fn('date_trunc', 'day', db.sequelize.col('createdAt')),
    [db.sequelize.fn('COUNT', 'game_completed'), 'game_completed_count'],
    [db.sequelize.fn('COUNT', 'room_full'), 'room_full_count']
  ],
  where: {
    createdAt: {
      [Op.gte]: moment().subtract(7, 'days').toDate()
    }
  },
})

或者,如果您的两个字段代表值而不是标志,则使用SUM代替。COUNT


推荐阅读