sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvorfor bliver resultatet af COUNT dobbelt, når jeg slutter to?

Dette er meget enkelt at svare på. Du har to record og to alarm . Du tilslutter dig disse og får fire poster, som du tæller.

Du kan løse dette problem ved at tælle forskellige id'er:

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

men jeg vil ikke anbefale dette. Hvorfor tilslutter du dig record og alarm alligevel? De er ikke direkte relaterede. Hvad du ønsker at deltage er antallet af record og antallet af alarm . Så samle før du tilmelder dig:

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;

(Jeg har fjernet den unødvendige joinforbindelse til "gruppe"-tabellen.)



  1. Sådan får du nullbar DateTime ud af databasen

  2. sammenføjede tabelrækker i kolonner med kolonnetitler fra originale rækker

  3. Omdøbning af kolonner i en SQL SELECT-sætning

  4. Oracle SQL Developer streng bogstavelig talt for lang fejl