Điều này rất đơn giản để trả lời. Bạn có hai record
và hai alarm
. Bạn tham gia những thứ này và nhận được bốn bản ghi, bạn đếm được.
Bạn có thể giải quyết vấn đề này bằng cách đếm các ID riêng biệt:
COUNT(DISTINCT records.id) AS "last24HMessagesCount",
COUNT(DISTINCT alarms.id) AS "activeAlarmsCount"
nhưng tôi sẽ không giới thiệu điều này. Tại sao bạn tham gia record
và alarm
dù sao? Chúng không liên quan trực tiếp. Những gì bạn muốn tham gia là số lượng record
và số alarm
. Vì vậy hãy tổng hợp lại trước khi tham gia:
SELECT
device.id,
device.name,
records.cnt AS "last24HMessagesCount",
alarms.cnt AS "activeAlarmsCount"
FROM device
LEFT OUTER JOIN
(
SELECT deviceId, count(*) AS cnt
FROM record
WHERE "date" > '2017-07-12 11:43:02.838 +00:00'
GROUP BY deviceId
) AS records ON device.id = records.deviceId
LEFT OUTER JOIN
(
SELECT deviceId, count(*) AS cnt
FROM alarm
WHERE status = 'new'
GROUP BY deviceId
) AS alarms ON device.id = alarms.deviceId
WHERE device.serviceId = 1832
AND device.groupId = 205;
(Tôi đã xóa phần tham gia không cần thiết vào bảng "nhóm".)