为什么postgres(与sequ​​elize)数1,如果没有价值?

我使用sequelize来计算设备在过去24小时内收到的消息数量。

Sequelize将执行以下请求(我在末尾附加了代码)

SELECT "device"."id", COUNT('records.id') AS "count" FROM "device" AS "device" LEFT OUTER JOIN "record" AS "records" ON "device"."id" = "records"."deviceId" AND "records"."date" > '2017-07-06 08:09:40.468 +00:00' WHERE "device"."typeId" = '2' GROUP BY "device"."id"; 

哪个返回

 id count 24 25790 163 1 95 1 

id 24的值是正确的,但其他值应该是0。

然后我手动执行这个SQL查询

 SELECT device.id, COUNT(record.id) AS count FROM device AS device LEFT OUTER JOIN record ON device.id = record."deviceId" AND record.date > '2017-07-06 08:09:40.468 +00:00' WHERE device."typeId" = '2' GROUP BY device.id; 

这给了我预期的结果。

我无法看到两个查询之间的区别。 有人知道为什么第二个工作?


续集请求如下

 const devices = await this.database.model('device').findAll({ where: { typeId: req.params.id, }, attributes: { include: [ 'id', [this.database.fn('COUNT', 'records.id'), 'count'], ], }, include: [{ model: this.database.model('record'), where: { date: { $gt: oneDayAgo, }, }, attributes: [], required: false, }], group: ['device.id'], }) 

SQL在records.id有单引号,因此SQL计算一个string值(从不为NULL )。 你要:

 SELECT "device"."id", COUNT(records.id) AS "count" 

我不知道如何在续集中expression这个问题,但问题是单引号。