PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

जब मैं दो में शामिल होता हूं तो COUNT का परिणाम दोगुना क्यों होता है?

इसका उत्तर देना बहुत आसान है। आपके पास दो 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;

(मैंने "ग्रुप" टेबल से अनावश्यक जुड़ाव हटा दिया है।)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL के लिए क्लाउड डेटाबेस विकल्पों की तुलना करना

  2. रेल में एक ActiveRecord लेनदेन में एकाधिक रिकॉर्ड अपडेट करें

  3. libpq . का उपयोग करके तालिका में फ़्लोटिंग पॉइंट नंबर डालना

  4. PostgreSQL फ़ंक्शन पैरामीटर के रूप में तालिका का नाम

  5. कठपुतली और कष्टप्रद चेतावनी पोस्टग्रेज:पोस्टग्रेस्क्ल को पासिंग संस्करण ::सर्वर पदावनत है