2
私はsequelizeを使用して、過去24時間にデバイスが受信したメッセージの数を数えます。値がない場合、postgres(sequelize付き)は1とカウントされるのはなぜですか?
Sequelizeは、以下の要求を実行しようとしている24
が正しいIDの
id count
24 25790
163 1
95 1
値を返す
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";
、他の値(Iはsequelize端コードを添付しました)
この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;
これは私に予想される結果を与える。
私は2つのクエリの違いを見ることができません。誰かがなぜ二番目が働いているのか知っていますか? SQLは、(NULL
ことはありません)文字列値をカウントしているので、
sequelize要求は、以下の
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'],
})
ありがとうございました! – ThomasThiebaud
'this.database.col( 'records'、 'id')'を使用して動作させる必要があります。できるだけ早く答えを受け入れます。 – ThomasThiebaud