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. Ruby on Rails:Как мога да редактирам database.yml за postgresql?

  2. Приложението Django в контейнера на Docker не може да намери postgres

  3. Как да декларирате променлива в заявка на PostgreSQL

  4. rake db:structure:dump се проваля под PostgreSQL / Rails 3.2

  5. Как да изтеглите Postgres bytea колона като файл