PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Mengapa hasil COUNT ganda ketika saya melakukan dua bergabung?

Ini sangat sederhana untuk dijawab. Anda memiliki dua record dan dua alarm . Anda bergabung dengan ini dan mendapatkan empat catatan, yang Anda hitung.

Anda dapat mengatasi masalah ini dengan menghitung ID yang berbeda:

COUNT(DISTINCT records.id) AS "last24HMessagesCount",
COUNT(DISTINCT alarms.id) AS "activeAlarmsCount"

tapi saya tidak akan merekomendasikan ini. Mengapa Anda bergabung dengan record dan alarm omong-omong? Mereka tidak berhubungan langsung. Apa yang Anda inginkan untuk bergabung adalah jumlah record dan jumlah alarm . Jadi kumpulkan sebelum bergabung:

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;

(Saya telah menghapus gabungan yang tidak perlu ke tabel "grup".)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ~~ Operator Di Postgres

  2. Postgresql - Bagaimana cara mempercepat pembaruan tabel besar (100 juta baris)?

  3. Menjalankan PostgreSQL Menggunakan Amazon RDS

  4. dblink tidak ada bahkan ketika ekstensi sudah ada?

  5. Masalah menyiapkan database postgreSQL untuk proyek Django