इसका उत्तर देना बहुत आसान है। आपके पास दो record
हैं और दो alarm
. आप इनसे जुड़ते हैं और चार रिकॉर्ड प्राप्त करते हैं, जिन्हें आप गिनते हैं।
आप अलग-अलग आईडी गिनकर इस समस्या का समाधान कर सकते हैं:
COUNT(DISTINCT records.id) AS "last24HMessagesCount",
COUNT(DISTINCT alarms.id) AS "activeAlarmsCount"
लेकिन मैं इसकी सिफारिश नहीं करूंगा। आप record
से क्यों जुड़ते हैं? और alarm
वैसे भी? वे सीधे संबंधित नहीं हैं। आप क्या चाहते हैं शामिल होने के लिए record
. की संख्या है और alarm
. की संख्या . इसलिए शामिल होने से पहले एकत्र करें:
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;
(मैंने "ग्रुप" टेबल से अनावश्यक जुड़ाव हटा दिया है।)