express - 在 Sequelize 中分组和计数

标签 express group-by count sequelize.js

我在 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'))]
      })
任何人都可以帮我解决这个问题。我希望它在折线图中表示。先感谢您。

最佳答案

在您的情况下,您应该使用 Sequelize functions :

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

关于express - 在 Sequelize 中分组和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66386855/

相关文章:

node.js - 如何在本地禁用 passportjs 身份验证

javascript - Node.js 日期参数

node.js - bluebird 协程与 Node redis

mysql - 在 MySQL 中使用 GROUP BY 选择具有同一列的两个条件的行的最佳方法是什么?

mysql - 从关于分组的前一行中减去一个值

node.js - Node Express 路由在本地工作但不在远程服务器上

python - 计算python中值的数量

mysql - 计算 SQL 中计数相对于类别的百分比

mysql - 如何将 Count(*) 列与 Mysql 中的另一列连接

MYSQL查询对某些列的出现次数进行求和